二叉搜索树插入函数c ++

时间:2018-01-19 14:59:46

标签: c++ binary-search-tree

我有以下问题。我在2年前用C ++编写代码,现在决定练习这门语言。我不知道发生了什么,因为当我想在插入后访问root->数据时,编译器说这是一个访问viloation。可能是我完全忘记了内存分配等编程概念,但请帮助我,我不能在这里看到错误!提前谢谢!

#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;
}

2 个答案:

答案 0 :(得分:1)

试试这个:

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);
    }
};

答案 1 :(得分:0)

if (node == NULL) {

        node = new Node(key);
 }

在上面的代码段中,当root == NULL时,您正在创建一个新节点。但是您没有将新创建的节点分配给根。需要通过引用传递如下。

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