簡體   English   中英

二進制搜索樹插入函數C ++

[英]binary search tree insert function c++

我有以下問題。 2年前,我使用C ++進行編碼,現在決定練習這種語言。 我不知道發生了什么,因為編譯器說插入后要訪問root-> data時這是訪問沖突。 可能是我完全忘記了內存分配等編程概念,但請幫助我,我看不到這里的錯誤! 提前致謝!

#define BLACK 0

 #define RED 1

using namespace std;

struct Node {

    Node* left, *right;
    int data;
    bool color;

    Node(int key) {
        data = key;
        left = right = NULL;
        color = RED;
    }
};

struct RBTree {

    Node* root;

    RBTree() { root = NULL; }

    void insertBST(Node* node, int key) {

        if (node == NULL) {

            node = new Node(key);
        }

        else {

            if (key < node->data) {

                insertBST(node->left, key);
            }

            else {

                insertBST(node->right, key);
            }
        }
    }

    void insert(int key) {

        insertBST(root, key);
    }
};

int main()
{

    RBTree tree;
    tree.insert(10);

    cout << tree.root->data;
    _getch();
    return 0;
}

嘗試這個:

struct RBTree {

    Node* root;

    RBTree() { root = NULL; }

    void insertBST(Node** node, int key) {

        if (*node == NULL) {

            *node = new Node(key);
        }

        else {

            if (key < (*node)->data) {

                insertBST(&(*node)->left, key);
            }

            else {

                insertBST(&(*node)->right, key);
            }
        }
    }

    void insert(int key) {

        insertBST(&root, key);
    }
};
if (node == NULL) {

        node = new Node(key);
 }

在上面的代碼段中,當根== NULL時,您將創建一個新節點。 但是您沒有將新創建的節點分配給根。 需要通過引用如下。

  T obj;
  if ( !ptr ) 
    ptr = &obj;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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