二叉树代码的解释

时间:2013-11-10 16:55:18

标签: java binary-tree

我在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;是否意味着每次添加新节点时都将所有树视为大节点?

感谢

1 个答案:

答案 0 :(得分:2)

这是因为该算法被破坏了。它每次都会直接从根节点插入新节点,删除之前的任何内容。

如果您打印树,您会发现它只有一个根节点为5,而在其右边,一个节点为100(树中总共有两个节点)。