将元素添加到二叉搜索树

时间:2017-03-09 13:19:20

标签: java data-structures binary-search-tree

可以来帮助我。我试图将元素添加到二叉搜索树,但它不起作用。它似乎只是添加第一个数字作为根元素,然后它不再添加任何东西。这是代码。

主要方法:

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(")");
        }
}

1 个答案:

答案 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,它应该激励你