在Java中的BST实现给出错误

时间:2016-05-07 18:35:53

标签: java binary-search-tree

我正在尝试实现一个简单的BST,然后按顺序打印出元素。我似乎得到了一个错误的输出,甚至运行调试器,无法真正理解出了什么问题。这是我使用addinorder方法实施BST。

public class BST {
    private Node root;

    private class Node{
        int data;
        Node left;
        Node right;

        public Node(int data){
            this.data = data;
        }
    }

    public BST(int item){
        root = new Node(item);
    }

    public void add(int item){
        root = add(item, root);
    }

    private Node add(int item, Node curr){

        if(curr == null){
            curr = new Node(item);
            return curr;
        }
        if(item < curr.data) curr.left = add(item, curr.left);
        if(item > curr.data) curr.right = add(item, curr.left);
        return curr;

    }
    public void inorder(){

        inorder(root);
    }

    private void inorder(Node curr){
        if(curr == null) return;
        inorder(curr.left);
        System.out.print(curr.data + " ");
        inorder(curr.right);
    }

这是主叫客户。

public class Solution {

    public static void main(String[] args) {

        BST bst = new BST(12);
        //bst.add(12);
        bst.add(7);
        bst.add(16);
        bst.add(3);
        bst.add(9);
        bst.add(13);
        bst.add(19);
        bst.inorder();
        //bst.printLevelByLevel();
    }
}

这是我得到的输出。

3 19 7 3 19 12 3 19 7 3 19 
Process finished with exit code 0

似乎无法理解为什么它多次读取相同的数据。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

add()方法中存在错误。

这里的小错误:

if (item < curr.data) curr.left = add(item, curr.left);
if (item > curr.data) curr.right = add(item, curr.left);

应该是:

if (item < curr.data) curr.left = add(item, curr.left);
if (item > curr.data) curr.right = add(item, curr.right);

另外,我看到另一个潜在的问题。您应该处理您尝试插入的值等于当前节点的值的情况。所以条件应该是:

if(item <= curr.data) curr.left = add(item, curr.left);

否则,您永远不会递归,并且永远不会添加新节点。

希望这有帮助!