Java中的二叉树
我正在尝试编写我自己的二叉树。虽然我可以找到许多二叉搜索树的例子,但我决定自己写这篇文章 到目前为止,我已经得出以下结论:Java中的二叉树,java,binary-tree,Java,Binary Tree,我正在尝试编写我自己的二叉树。虽然我可以找到许多二叉搜索树的例子,但我决定自己写这篇文章 到目前为止,我已经得出以下结论: 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.r
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;
}
}
}
}
当我尝试向二叉树添加值时,只有根才能添加值。我正在慢慢地尝试编写代码的其余部分,它会发现左边的子对象是满的、回溯的以及所有的情况。我的问题是,为什么它甚至不向最左边的子级添加下一个值(在对它的第二次调用中)。如果您不给我代码,我会非常感激,我想学习。因为当您输入其他代码时,{}curr总是!=null(因为curr=root和root!=null),所以循环永远不会执行,因为当您输入else时,{}curr总是!=null(因为curr=root和root!=null),所以循环永远不会执行 为什么在第二次调用中,它甚至不向最左边的子级添加下一个值 因为这不会将
当前左侧
分配给新节点
:
curr = curr.left;
curr = newnode;
修正:
请注意,代码中还有其他错误。你会通过更多的电话找到他们
为什么在第二次调用中,它甚至不向最左边的子级添加下一个值
因为这不会将当前左侧
分配给新节点
:
curr = curr.left;
curr = newnode;
修正:
请注意,代码中还有其他错误。您将通过更多的电话了解他们。在您的陈述中:
if(curr.left == null){
curr = curr.left;
curr = newnode;
...
}
当您将赋值“curr=curr.left”时,“curr”将被赋值为null,并且不再引用树中的任何内容。为了让树引用它,您需要将“curr”的左链接分配给新节点
if(curr.left == null){
curr.left = newnode;
...
}
下面的图片显示了两者之间的区别:
在您的陈述中:
if(curr.left == null){
curr = curr.left;
curr = newnode;
...
}
当您将赋值“curr=curr.left”时,“curr”将被赋值为null,并且不再引用树中的任何内容。为了让树引用它,您需要将“curr”的左链接分配给新节点
if(curr.left == null){
curr.left = newnode;
...
}
下面的图片显示了两者之间的区别:
好的。但我不想让它进入infi循环。那么我还能怎么阻止它呢?最简单的解决方法是使用递归。如果你环顾四周几乎任何一棵树,你会发现递归是正确的。但我不想让它进入infi循环。那么我还能怎么阻止它呢?最简单的解决方法是使用递归。如果你环顾四周几乎任何一棵树,你都会看到递归