我在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;是否意味着每次添加新节点时都将所有树视为大节点?
感谢
答案 0 :(得分:2)
这是因为该算法被破坏了。它每次都会直接从根节点插入新节点,删除之前的任何内容。
如果您打印树,您会发现它只有一个根节点为5,而在其右边,一个节点为100(树中总共有两个节点)。