IAM尝试为BST类实现递归插入节点方法
public void insertNode(Node r, Node n)
{
if(r == null)
{
System.out.println("r=n"+ n.data);
r = n;
}
else
{
System.out.println("r=! null finding place in tree for "+ n.data);
if(n.data <= r.data)
{
if(r.left == null)
r.left = n;
else
insertNode(r.left, n);
}
else
{
if(r.right == null)
r.right = n;
else
insertNode(r.right, n);
}
}
}
我试图像这样调用此方法:
int[] arrTree = {34, 2, 56, 12, 44, 39, 56, 1};
BT t = new BT();
for (int i = 0; i < arrTree.length; i++)
{
//System.out.println("Tree Root = "+ t.getRoot());
BT.Node n = t.new Node(arrTree[i]);
t.insertNode(t.root, n);
}
但是我总是得到以下输出:
r=n34
r=n2
r=n56
r=n12
r=n44
r=n39
r=n56
r=n1
Node是BT的内部类。
经过数小时的运行和尝试其他事情,我无法弄清楚我在做什么错。
从您显示的代码来看,我的钱在这里的错误上:
public void insertNode(Node r, Node n)
{
if(r == null)
{
System.out.println("r=n"+ n.data);
r = n; //you overwrite the value of r but never use it
}
Node r
实际上是对所引用对象的单独引用t.root
,因此用r
另一个值替换不会更改t.root
方法外的引用。您可以在方法内部修改引用的数据,但不能修改引用本身。
我有一个整数的二叉搜索树,包括1、2、...、9。我的遍历方法工作,我知道节点在那里,并且以正确的顺序。 我在纸上写下了当我搜索一个值时发生的事情,它返回根是没有意义的。我做错了什么?
我正在研究数据结构,我遇到了一个难题。目标是根据数组元素的值将数组元素插入到二叉搜索树中,即(主树的根节点为数组[0],左子树的根_node小于父节点,右子树的根节点大于父节点)。这将递归进行,直到所有数组元素都插入BST。 我实现了两个类: 这表示具有属性的节点(数据,左,右): 是BST的私有方法,它执行将节点插入树的实际工作。我将其与分开,因为需要使用RSpec评估的预期解决方案。 然后,我
我有使用递归在二叉搜索树中插入值的ds代码。问题是根始终保持空。执行时,第一个printf()打印10,但第二个printf(在insertRec(10)之后)不打印任何内容,因为root为null。
我是Java的新手,我想创建一个包含插入和预购遍历的二叉搜索树类,但是当我完成插入时,根对象仍然为空,并且编译器在预购遍历期间抛出NullPointerException。 我的节点类: 我的二进制搜索树类:
我最近完成了一个项目的二进制搜索树,我正在工作。很顺利,我学到了很多。然而,现在我需要实现一个常规的二叉树...出于某种原因,这让我难倒了。 我正在寻找一种方法来做我的InsertNode功能... 通常在BST中,您只需检查数据 有谁能帮我实现一个函数,只需将一个新节点从左到右不按特定顺序添加到二叉树中? 以下是我的BST插页:
二叉搜索树(BST)和二叉树(BT)中的插入有什么区别?我知道,在BST中,您将新节点的值与根进行比较,如果较小,则添加到其左侧,如果较大,则将其添加到根的右侧。BT的程序是否相同?如果没有,插入和移除的步骤是什么?