我正在编写一个从txt文件中获取输入然后将其输入BST(然后操纵数据等)的程序。
正在发生的事情是数据文件被正确读取,它进入插入功能,"写入"信息,但根NODE保持为NULL。
代码:
#include <iostream>
#include <string>
using namespace std;
class BST {
private:
struct NODE {
int ID;
string name;
float balance;
NODE *left;
NODE *right;
};
NODE *root;
void Insert(NODE* &p, int x, float balance, string name) {
NODE* q;
if (p == NULL) {
q = new NODE;
q -> ID = x;
q -> name = name;
q -> balance;
q -> left = NULL;
q -> right = NULL;
p = q;
} else {
if (x < p -> ID) {
Insert(p -> left, x, balance, name);
} else {
Insert(p -> right, x, balance, name);
}
}
}
void DisplayInorder(NODE * p) {
if (p != NULL) {
DisplayInorder(p -> left); // LC
cout << p -> ID << "\t" << p->name << "\t" << p -> ID << endl; // P
DisplayInorder(p -> right); // RC
}
}
void DisplayRecord(NODE * p, int x, bool& found) {
if (p != NULL) {
DisplayRecord(p -> left, x, found); // LC
if (x == p->ID) {
found = true;
}
DisplayRecord(p -> right,x, found); // RC
}
}
public:
BST() {
root = NULL;
}
void Insert(int x, float balance, string name) {
Insert(root, x, balance, name);
}
void DisplayInorder() {
DisplayInorder(root);
}
void DisplayRecord(int x, bool& found){
DisplayRecord(root, x, found);
}
};
致电声明:
void Initialize(BST tree) {
fstream f;
f.open("data.txt",ios::in);
do {
int ID = 0;
float balance = 0;
string name = "NULL";
f >> ID >> name >> balance;
tree.Insert(ID,balance,name);
} while(f.eof() == false);
f.close();
}
是否因为BST树对象需要通过引用传递?
答案 0 :(得分:1)
是的,树需要通过引用传递。现在你正在复制,只插入副本。
}中,您在调用Initialize
的函数中拥有的原始树将不会更改。
答案 1 :(得分:0)
Initialize函数将'BST树'作为参数 但是,对'tree'所做的任何更改都只有本地函数作用域,因为'tree'是副本。
更改
void Initialize(BST tree)
到
void Initialize(BST& tree)