插入方法不工作二进制树java

时间:2014-11-26 17:08:03

标签: java insert binary-tree

这是 BinarySearchTree,只是一个普通的二叉树。

这是我的RegularTree类:

public class RegularTree extends BinaryTree {

    public RegularTree() {
        super();
    }

    public void insert(Comparable item) {
        if(this.isEmpty()) {
            this.setRoot(new TreeNode(item));
            return;
        }

        TreeNode t = this.getRoot();
        while(t != null) {
            if(t.getLeft() == null)
                t.setLeft(new TreeNode(item));
            else if(t.getRight() == null)
                t.setRight(new TreeNode(item));
            else {
                if(size(t.getLeft()) > size(t.getRight()))
                    t = t.getRight();
                else
                    t = t.getLeft();
            }
        }
    }

    public int size(TreeNode node) {
        return(getSize(node));
    }

    private int getSize(TreeNode node) {
        if (node == null)
            return(0);
        else
            return(getSize(node.getLeft()) + 1 + getSize(node.getRight()));
    }

    public TreeNode find(Comparable key) {
        TreeNode p = this.getRoot();
        while(p != null && key.compareTo(p.getValue()) != 0) {
            if(key.compareTo(p.getValue()) < 0)
                p = p.getLeft();
            else
                p = p.getRight();
        }
        return p;
    }

    public void inorder() {
        doInorderTraversal(this.getRoot());
    }

    private void doInorderTraversal(TreeNode t) {
        if(t != null) {
            doInorderTraversal(t.getLeft());
            System.out.print(t.getValue() + " ");
            doInorderTraversal(t.getRight());
        }
    }

}

这是我的主要方法:

public static void main(String[] args) {
    RegularTree tree = new RegularTree();
    tree.setRoot(new TreeNode(1));
    tree.insert(2);
    tree.insert(3);
    tree.insert(4);
    tree.insert(5);
    tree.insert(6);
    tree.inorder();
}

这应该创建一个如下所示的树:

                1
              /   \
            2       3
           / \     / 
         4    5   6

tree.inorder()应该对树进行顺序遍历,这意味着它应该打印出来4 2 5 1 6 3

但是,当我运行main方法时,没有任何反应。我相信我的插入方法有问题,但我不确定是什么。

1 个答案:

答案 0 :(得分:0)

正如我在上面的评论中所提到的,你应该在调用后设置{Left,Right}。我刚刚在您的代码中测试了修改,我得到了4 2 5 1 6 3,如您所愿。

我没有修改代码中的任何其他内容。

我将修改后的版本包括在内:

public class BinaryTree {

TreeNode root;


public int size(TreeNode node) {
    return(getSize(node));
}

private int getSize(TreeNode node) {
    if (node == null)
        return(0);
    else
        return(getSize(node.getLeft()) + 1 + getSize(node.getRight()));
}

public void insert(Comparable item) {
    if(this.getRoot() == null) {
        this.setRoot(new TreeNode(item));
        return;
    }

    TreeNode t = this.getRoot();
    while(t != null) {
        if(t.getLeft() == null) {
            t.setLeft(new TreeNode(item));
            return;
        }
        else if(t.getRight() == null) {
            t.setRight(new TreeNode(item));
            return;
        }
        else {
            if(size(t.getLeft()) > size(t.getRight()))
                t = t.getRight();
            else
                t = t.getLeft();
        }
    }
}





public TreeNode getRoot() {
    return root;
}

public void setRoot(TreeNode root) {
    this.root = root;
}

public void inorder() {
    doInorderTraversal(this.getRoot());
}

private void doInorderTraversal(TreeNode t) {
    if(t != null) {
        doInorderTraversal(t.getLeft());
        System.out.print(t.getValue() + " ");
        doInorderTraversal(t.getRight());
    }
}

public static void main(String[] args) {
    BinaryTree tree = new BinaryTree();
    tree.setRoot(new TreeNode(1));
    tree.insert(2);
    tree.insert(3);
    tree.insert(4);
    tree.insert(6);
    tree.insert(5);
    tree.inorder();

}
  }