我已经创建了一种将新项目添加到我的二进制搜索树中的方法,我不知道自己有什么错,但是它并没有添加任何内容到我的树中……我将附加我的BTNode类和我的add方法。我真的很感谢您的帮助/建议。
<link rel="stylesheet" href="~/Content/bootstrap-cerulean.css" />
//添加方法
public class BTNode
{
public int item;
public BTNode left;
public BTNode right;
public BTNode(int i, BTNode l, BTNode r)
{
item = i;
left = l;
right = r;
}
public String toString()
{
return "[" + item + "]";
}
}
//测试器
public BTNode add (BTNode node, int value)
{
if (node == null)
{
node = new BTNode(value, null, null);
return node;
}
else if (node.item > value)
node.left = add(node.left, value);
else if (node.item < value)
node.right = add(node.right, value);
return node;
}
答案 0 :(得分:0)
我认为问题出在以下几行:
if (node == null)
{
node = new BTNode(value, null, null);
return node;
} else if (xxx)
您必须将其更改为:
if (node == null)
{
node = new BTNode(value, null, null);
if(this.item>value) {
left = node;
} else {
right = node;
}
return node;
} else if (xxx)
答案 1 :(得分:0)
根据您的main
,我假设add
方法属于BinarySearchTree
类。
您的add方法可以正常工作,但是您必须显示树才能看到它的工作。
例如,如果您修改BTNode
的{{1}}方法以显示给定节点的子树的所有节点:
toString()
您将看到打印public String toString()
{
StringBuilder sb = new StringBuilder();
if (left != null) {
sb.append (left.toString ());
}
sb.append ("[" + item + "]");
if (right != null) {
sb.append (right.toString ());
}
return sb.toString ();
}
节点:
root
得出所有节点,包括您用System.out.println (root);
添加的节点:
tree.add(root,32);
您的[10][20][27][32][70][115][150][300]
方法的一个小问题是,如果树中已经存在具有相同值的节点,则不会添加新节点。我不知道这是否是预期的行为。
答案 2 :(得分:0)
如果我是你,我会将add
封装到add(int val)
的{{1}}中,下面是一个演示:
BinarySearchTree