二叉树代码的说明



我在Java中找到了一个二叉树的代码,它是:

public class Tree {
    Node root;
    Node curr;
    public void addNode(int n){
        Node temp=new Node(n);
        if (root==null){
            root=temp;
        }
        else{
            curr=root;
            while(curr!=null){
                System.out.println("current element "+curr.elem);
                if (temp.elem>curr.elem){
                    curr=curr.right;
                    if (curr==null){
                        System.out.println("added right branch element "+temp.elem);
                        root.der=temp;
                    }
                }
                else{
                    curr=curr.left;
                    if (curr==null){
                        root.left=temp;
                    }
                }
            }
        }
    }
}
public class Node {
    int e;
    Node left;
    Node right;
    public Nodo (int n){
        e=n;
        left=null;
        right=null;
    }
}
public static void main(String[] args) {
        // TODO code application logic here
        Tree t=new Tree();
        t.addNode(5);
        t.addNode(10);
        t.addNode(20);
        t.addNode(50);   
    }

我添加了一些打印行以查看它的内部工作,但我得到的问题是为什么打印此代码的数据是:

current element 5
added right branch element 10
current element 5
current element 10
added right branch element 20
current element 5
current element 20
added right branch element 50
current element 5
current element 50
added right branch element 100 

我的意思是为什么它会跳入 while 循环并且不打印内部元素?例如,当插入数字 50 时,我想它应该打印:

current element 5
current element 10
current element 20

但是没有直接从 5 到 20,为什么会这样? 还有那行说:

root.der=temp

或 root.left=temp;这是否意味着每次我添加新节点时,所有树都被视为一个大节点?

谢谢

这是因为该算法已损坏。 它每次都直接从根节点插入新节点,擦除之前的任何内容。

如果你打印你的树,你会发现它只有一个根节点 5,在其右侧,有一个 100 的节点(树中总共有 2 个节点)。

最新更新