我目前正在学习使用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);
}
}
每当我添加一个项目,根仍然为空,没有右或左的项目,如果有人能帮助我,我会非常感激
很好的代码,但递归并没有更进一步
item.left = insertNode(item.left, d);
item.right = insertNode(item.right, d);
并且初始根不会更新:
root = insertNode(root, d);
其他部分或最终退货是多余的。
代码风格的东西
将一个节点作为输入,并返回更新的节点值,因此调用模式应该如下所示
X = insertNode(X, d); // X is some expression
这是因为java永远无法为传递的参数表达式赋值:它没有按引用传递,而是按值传递f(x)
从不分配给x
。
root
始终为空,因为您从未给它赋值。
您可以在方法检查的开头添加并分配它
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.left = insertNode(item.left, d);
对于第二种情况,您只需使用item.right
。
public static void main(String[]args){main main=new main();
我创造了这个二叉查找树。我使用循环和递归编写了两种形式的插入方法。递归代码虽然看起来是正确的,但并不工作,我想不出问题是什么。当我使用insertRecursion方法创建树时,leftChild和rightChild总是为null。 }
二叉搜索树(BST)和二叉树(BT)中的插入有什么区别?我知道,在BST中,您将新节点的值与根进行比较,如果较小,则添加到其左侧,如果较大,则将其添加到根的右侧。BT的程序是否相同?如果没有,插入和移除的步骤是什么?
我最近完成了一个项目的二进制搜索树,我正在工作。很顺利,我学到了很多。然而,现在我需要实现一个常规的二叉树...出于某种原因,这让我难倒了。 我正在寻找一种方法来做我的InsertNode功能... 通常在BST中,您只需检查数据 有谁能帮我实现一个函数,只需将一个新节点从左到右不按特定顺序添加到二叉树中? 以下是我的BST插页:
到目前为止我的理解是: > (i)调用值=10的。由于root已经设置为50,如果条件为10<50,程序将进入第二个。 (ii)调用Root.left为10,节点值为2的递归insert函数。程序再次进入第二个if条件,条件为2<10。 (iii)再次调用Root.left为None,value为2的递归insert函数。现在程序进入first if条件,root获得值2。这将完成递归重复调用,程
我试图在二叉树中插入节点,如果我用addNode(Node root)替换方法addNode(Node Node)代码运行良好。这是因为我在第一行声明了吗?请解释一下。addNode方法由于字数限制而不完整,否则它是完整的,运行良好。