二进制搜索树仍然是空的?

时间:2013-11-20 05:53:37

标签: c++ visual-c++ data-structures binary-search-tree

我正在编写一个从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树对象需要通过引用传递?

2 个答案:

答案 0 :(得分:1)

是的,树需要通过引用传递。现在你正在复制,只插入副本。

}中,您在调用Initialize的函数中拥有的原始树将不会更改。

答案 1 :(得分:0)

Initialize函数将'BST树'作为参数 但是,对'tree'所做的任何更改都只有本地函数作用域,因为'tree'是副本。

更改

void Initialize(BST tree) 

void Initialize(BST& tree)