我在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 个节点)。