可以来帮助我。我试图将元素添加到二叉搜索树,但它不起作用。它似乎只是添加第一个数字作为根元素,然后它不再添加任何东西。这是代码。
主要方法:
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int a = 1;
int v, b, c;
TNode1 j = new TNode1(0, null, null);
BST1 s = new BST1();
while (a == 1) {
System.out.println("1.Add numeber\n2.Print\n3.Stop");
v = kb.nextInt();
switch (v) {
case 1:
System.out.println("Give a number");
b = kb.nextInt();
s.insert(b);
break;
case 2:
s.Print();
break;
case 3:
break;
}
}
}
在BST1课程中:
public void insert(int x) {
if (root == null) {
root = new TNode1(x, null, null);
lastFound = root;
} else {
lastFound = root.insert(x);
}
}
在TNode课程中:
protected int element;
protected TNode1 left;
protected TNode1 right;
public TNode1 insert(int x) {
if (x < element) {
if (left == null) {
left = new TNode1(x, null, null);
return left;
} else
return left.insert(x);
} else if (x > element) {
if (right == null) {
right = new TNode1(x, null, null);
return right;
} else
return right.insert(x);
} else
return this;
}
以下是打印方法:
在BST1课程中:
public void Print()
{
root.Print();
System.out.println(".");
}
在TNode1课程中:
public void Print()
{
System.out.print("(");
if (left != null)
{
left.Print();
System.out.print(this);
}
if (right != null)
{
right.Print();
System.out.print(")");
}
}
答案 0 :(得分:0)
问题是停止不会停止循环。如果停止,您需要设置a = 1;
最好拨打s.insert
,如果不存在,则会创建root
,否则会调用root.insert(x)
。
insert
的{{1}}似乎是正确的。您可能遇到的问题是使用TNode
方法。建议:
print
请注意,我在这里使用了很多辅助方法。如果你没有它们,那么你需要实现它们。你可以这样打印:
public void print(String path, TNode1 node) {
System.out.println(path + ": " + node.getElement());
if (node.hasLeft()) print(path + "L", node.getLeft());
if (node.hasRight()) print(path + "R", node.getRight());
}
编辑:
问题编辑完成后,我们会提供有关s.print("", s.getRoot());
方法的更多信息。这是代码:
print
问题:
public void Print()
{
System.out.print("(");
if (left != null)
{
left.Print();
System.out.print(this);
}
if (right != null)
{
right.Print();
System.out.print(")");
}
}
您需要System.out.print(this)
到System.out.print(this.getElement())
print
而不是int
this
这个元素,请看看我上面的print
,它应该激励你