二进制搜索树插入实现

时间:2017-07-12 00:37:52

标签: recursion null c++14 binary-search-tree nodes

所以我的问题如下: 当我运行这个插入辅助方法的代码时,我很肯定我的新节点方法是正确的,因为它用于实例化二进制搜索树,没有插入节点。为什么我不能使用这种特定的实现?这里出了什么问题?

我知道如何使用其他插入实现,其中一个将检查根的左右节点以及它们是否为空,但无法弄清楚这种更优雅的可能性的问题。对此的答案将帮助我创建超出插入函数范围的其他函数。

顺便说一下,我有另一个函数调用这个辅助函数

感谢!!!!!

//INSERT METHODS
void BinarySearchTree::insert(int data, struct node* root) {
//If root is null make new node there
if (!root) {
    root = new node(data);

}
else if (root -> data > data) {
    insert(data, root -> left);
}
else {
    insert(data, root -> right);
}

}

1 个答案:

答案 0 :(得分:0)

变量root是一个参数,它只对该一个方法调用具有本地可见性。含义root = new node(data)确实会创建一个新节点,但这只会被参数指向。你的方法没有返回任何东西,它实际上并不知道它应该用你的新根对象做什么(它与你可能定义的任何类变量的名称相同)。

因此,您创建了一个新节点,但不能在一个方法调用之外使用它。这导致空树。

作为未来问题的附注:包含您正在使用的编程语言的标记。很多人使用它作为过滤器,所以如果你使用正确的标签,你实际上会有更多的人看到它。