所以我的问题如下: 当我运行这个插入辅助方法的代码时,我很肯定我的新节点方法是正确的,因为它用于实例化二进制搜索树,没有插入节点。为什么我不能使用这种特定的实现?这里出了什么问题?
我知道如何使用其他插入实现,其中一个将检查根的左右节点以及它们是否为空,但无法弄清楚这种更优雅的可能性的问题。对此的答案将帮助我创建超出插入函数范围的其他函数。
顺便说一下,我有另一个函数调用这个辅助函数
感谢!!!!!
//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);
}
}
答案 0 :(得分:0)
变量root
是一个参数,它只对该一个方法调用具有本地可见性。含义root = new node(data)
确实会创建一个新节点,但这只会被参数指向。你的方法没有返回任何东西,它实际上并不知道它应该用你的新根对象做什么(它与你可能定义的任何类变量的名称相同)。
因此,您创建了一个新节点,但不能在一个方法调用之外使用它。这导致空树。
作为未来问题的附注:包含您正在使用的编程语言的标记。很多人使用它作为过滤器,所以如果你使用正确的标签,你实际上会有更多的人看到它。