[英]Binary Search Tree remains empty?
我正在編寫一個程序,該程序從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
from的函數中擁有的原始樹不會更改。
Initialize函數采用“ BST樹”作為參數,但是對“ tree”所做的任何更改都將具有局部函數作用域,因為“ tree”是副本。
更改
void Initialize(BST tree)
至
void Initialize(BST& tree)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.