簡體   English   中英

二進制搜索樹仍然為空?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM