添加节点二叉搜索树的C ++(Add nodes to binary search tree c++

2019-10-18 08:22发布

我建立一个二叉搜索树。 现在我有一个节点添加到树中的一个问题。

void BinaryTree::add(int value, Node* node) {
    if(!node)
        node = new Node(value);
    else if(node->key < value)
        this->add(value, node->rightNode);
    else if(node->key > value)
        this->add(value, node->leftNode);
}

此代码似乎并不当我打电话给工作:

BinaryTree test;
test.add(4, test.root);
test.add(1, test.root);
test.add(5, test.root);
test.add(2, test.root);
test.add(3, test.root);
test.add(7, test.root);
test.add(6, test.root);

第一添加通话后,树“测试”的根源仍然是空的。 我应如何更改代码,这样,当我把它添加将被更新和节点进入正确的位置的树? 非常感谢你!

Answer 1:

你是路过的Node *的价值在这里:

void BinaryTree::add(int value, Node* node) {

一种解决方案是通过引用传递代替:

void BinaryTree::add(int value, Node *& node) {
                                      ^

如果您按值传递的功能正在接收的副本Node * ,因此它的任何修改不会被反射回调用代码。

你也可能要考虑什么时候会发生什么value等于key



Answer 2:

您递归调用add函数,但无处在那里我会看到你实际分配leftNode或rightNode到节点传递的。



文章来源: Add nodes to binary search tree c++