我正在尝试编写自己的二叉树。虽然我可以找到很多二叉搜索树的例子,但我决定自己写一下。
到目前为止,我已经达到了这个目标:
public class bTree {
bnode root=null;
void add(int val){
bnode newnode= new bnode(val);
bnode curr = this.root;
bnode parent = null;
if(this.root == null){
this.root = newnode;
System.out.println("Inserted at root \t"+newnode.value);
}
else{
while( curr != null){
System.out.println("Current Left and Right\t"+curr.left+"\t"+curr.right);
if(curr.left == null){
curr = curr.left;
curr = newnode;
System.out.println("Inserted Left\t" +newnode.value);
return;
}
if(curr.right == null){
curr = curr.right;
curr = newnode;
System.out.println("Inserted Right\t" +newnode.value);
return;
}
}
}
}
当我尝试将值添加到二叉树时,只有root才能添加值。我正在慢慢地尝试编写剩下的代码,它发现左边的孩子已经完整并且回溯了所有的情况。我的问题是为什么它甚至没有向最左边的孩子添加下一个值(在第二次调用它时)。如果你不给我代码,我想要学习,我真的很感激。
答案 0 :(得分:3)
在你的陈述中:
if(curr.left == null){
curr = curr.left;
curr = newnode;
...
}
当您进行作业“curr = curr.left”时,“curr”会被指定为null,并且不再引用树中的任何内容。因此树将引用它,您需要将“curr”的左侧链接分配给新节点
if(curr.left == null){
curr.left = newnode;
...
}
这是一张显示两者之间差异的图片:
答案 1 :(得分:2)
为什么在第二次调用中,它甚至没有向最左边的孩子添加下一个值?
因为这不会将curr.left
分配给newnode
:
curr = curr.left;
curr = newnode;
修正:
curr = curr.left = newnode;
请注意,您的代码中还有其他错误。你会通过更多的电话找到它们。
答案 2 :(得分:1)
因为当你输入别的时候{} curr总是!= null(因为curr = root和root!= null),所以循环永远不会执行