我目前正在使用java学习树木 我在这里发生了一些错误 在二叉树中插入项目 我不知道为什么它不起作用
这是代码: 树节点:
public class TNode {
int data;
TNode left;
TNode right;
public TNode(int data) {
this.data = data;
left = null;
right = null;
}
}
树类:
public class Tree {
TNode root;
public Tree(){
root = null;
}
public TNode insertNode(TNode item, int d) {
if (item == null) {
return new TNode(d);
}
if (d < item.data) {
item.left = insertNode(item, d);
}
if (d > item.data) {
item.right = insertNode(item, d);
} else {
return item;
}
return item;
}
public void add(int d) {
insertNode(root, d);
}
}
每当我添加一个项目时,根保持为null,没有右边或左边的项目 如果有人可以提供帮助,我会非常感激
答案 0 :(得分:2)
root
始终为null,因为您从不为其赋值。
您可以添加到方法检查的开头并分配
public TNode insertNode(TNode item, int d){
if(item == null){
TNode node = new TNode(d);
if (root == null) {
root = node;
}
return node
}
... rest of method isn't changed...
此外,当您进行递归时,您应该使用正确的子节点进行呼叫,而不是始终使用item
进行呼叫,因此例如,第一种情况是:
item.left = insertNode(item.left, d);
对于第二种情况,您只需使用item.right
。
答案 1 :(得分:1)
精细代码,但递归不再进一步
item.left = insertNode(item.left, d);
item.right = insertNode(item.right, d);
初始根未更新:
root = insertNode(root, d);
其他部分或最终回报是多余的。
代码风格
insertNode
有一个节点作为输入,并返回更新的节点值,因此调用“pattern”应该看起来像
X = insertNode(X, d); // X is some expression
这是因为java永远不能分配给传递的参数表达式:它没有pass-by-reference,而是pass-by-value; f(x)
永远不会分配给x
。