我实施BST插件有什么问题? Java的

时间:2015-01-09 04:02:17

标签: java algorithm binary-search-tree

我试图了解BST插入算法的工作原理。我是递归地做的,但我对它为什么不能正常工作感到有点困惑。

   public boolean insert(int key) {
        return insertHelper(root, key);
    }

    private boolean insertHelper(TreeNode sub, int key) {
        if (sub == null) {
            sub = new TreeNode(key);
            return true;
        } else if (sub.getData() > key) {
            return insertHelper(sub.getLeftChild(), key);
        } else
            return insertHelper(sub.getRightChild(), key);
    }

TreeNode构造函数

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

问题是当我遍历树来打印元素时,树一直是空的。插入算法一定存在问题。

2 个答案:

答案 0 :(得分:1)

因为您没有在代码的任何部分设置任何左右孩子。实现insertHelper以返回TreeNode而不是布尔值的最佳技术。此代码段可能会有所帮助。

    private Node<T> insert(Node<T> p, T toInsert){
      if (p == null)
         return new Node<T>(toInsert);

      if (compare(toInsert, p.data) == 0)
        return p;

      if (compare(toInsert, p.data) < 0)
         p.left = insert(p.left, toInsert);
      else
         p.right = insert(p.right, toInsert);
      return p;
   }

答案 1 :(得分:1)

它仍为空,因为您的根始终为null

在java中,所有参数都按值传递。 所以这段代码:

// ....
    if (sub == null) {
        sub = new TreeNode(key);
        return true;
//....

将创建新节点,但不会更新root。