我正在编写一个程序,该程序从txt文件中获取输入,然后将其输入到BST中(然后处理数据等)。
发生的情况是正确读取了数据文件,将其转到Insert函数,“写入”了信息,但是根节点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树对象需要通过引用传递吗?
最佳答案
是的,该树需要通过引用传递。现在,您正在制作副本,并且只能插入副本中。您从中调用Initialize
的函数中具有的原始树不会更改。
关于c++ - 二进制搜索树仍然为空?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20088432/