问题描述
public void insert(String key)
{
if(top == null)
{
top = new Node(key);
}else {
Node newNode = new Node(key);
Node rover = top;
Node prev = top;
boolean wentLeft = true;
while(rover != null)
{
if (rover.getName().compareto(key) < 0)
{
prev = rover;
rover = rover.getRight();
wentLeft = false;
}else {
wentLeft = true;
prev = rover;
rover = rover.getLeft();
}
}
if(wentLeft == true)
{
prev.setLeft(newNode);
}else {
prev.setRight(newNode);
}
}
nElems++;
}
尽管没有在方法中的任何地方直接设置,二叉搜索树的顶部及其子节点如何更新?
我知道这可能与浅拷贝有关,而 rover/prev 之类的仍然引用内存中的顶部,但我仍然不明白。
尽管我觉得我在概念层面上理解了链表和二叉搜索树,但如果不理解这一点,我还是不舒服。
解决方法
没有复制。当您分配 prev = top 时,只会创建对与 top 相同对象的另一个引用,而不是副本。
代码有效,因为节点是一一插入的。 当 prev.setLeft/setRight 被调用时,prev 已经在树中了,因为它之前被插入了。所以 prev 已经在树中了,我。 e. prev 的父级是 top,或者 prev 的父级的父级,你明白了。因此,当 new_node 成为 prev 的孩子时,它成为树的一部分。
这就是链表和树如此有用的原因。当你插入一个元素时,你只需要建立一个连接。