仅引用其副本时如何更新我的二进制搜索树的顶部节点
How is the top Node of my Binary Search Tree updated when only making references to its copies
这个问题也适用于各种链表方法。所以,当我有一个方法时:
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 相同的 object 的引用,而不是副本。
该代码有效,因为节点是一个接一个地插入的。
当调用 prev.setLeft/setRight 时,prev 已经在树中,因为它是之前插入的。所以 prev 已经在树中,i。 e. prev 的 parent 是 top,或者 prev 的 parent 的 parent,你明白了。因此,当 new_node 成为 prev 的 child 时,它就成为树的一部分。
这就是链表和树如此有用的原因。当你插入一个元素时,你只需要建立一个连接。
这个问题也适用于各种链表方法。所以,当我有一个方法时:
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 相同的 object 的引用,而不是副本。
该代码有效,因为节点是一个接一个地插入的。 当调用 prev.setLeft/setRight 时,prev 已经在树中,因为它是之前插入的。所以 prev 已经在树中,i。 e. prev 的 parent 是 top,或者 prev 的 parent 的 parent,你明白了。因此,当 new_node 成为 prev 的 child 时,它就成为树的一部分。
这就是链表和树如此有用的原因。当你插入一个元素时,你只需要建立一个连接。