仅引用其副本时如何更新我的二进制搜索树的顶部节点

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 时,它就成为树的一部分。

这就是链表和树如此有用的原因。当你插入一个元素时,你只需要建立一个连接。