无标题节点JAVA插入BST

时间:2012-10-24 04:44:15

标签: java binary-search-tree

我正在研究BST的递归插入方法。该函数假设是一个递归的辅助方法,并且位于一个名为Node的私有类中。 Node类位于名为BinarySearchTree的类中,该类包含根的实例变量。 当我试图插入一个元素时,我得到一个NullPointerException:

  

this.left = insert(((Node)left).element);

我不确定为什么会这样。如果我理解正确,在BST中,我想将项目插入到横向路径上的最后一个位置。任何帮助表示赞赏!

private class Node implements BinaryNode<E>
{
    E item;
    BinaryNode<E> left, right;

   public BinaryNode<E> insert(E item)
   {
       int compare = item.compareTo(((Node)root).item);

       if(root == null)
       {
           root = new Node();
           ((Node)root).item = item;
       }
       else if(compare < 0)
       {
           this.left = insert(((Node)left).item);
       }
       else if(compare > 0)
       {
           this.right = insert(((Node)right).item);
       }

        return root;
     }
}

2 个答案:

答案 0 :(得分:0)

因为你的左边是空的? 不应该是this.left = insert(item)

但代码中还有其他问题。我会留下给你找出来的。

答案 1 :(得分:0)

那是因为你在成功插入之前就从空对象中读取了一个参数。你的左边和右边都是空的,所以我会把它留给你弄清楚,但想一想。您应该插入new Node(item)。如果您的函数是递归的,那么您需要传入当前parentNode(root)的引用。这是一个让你走上前进的骨架,希望你能理解这些代码。

   private Node<Item> insert(Node traversedNode, Item item)
   {
     if(traversedNode == null)
     {
         // make your life easier and pass item in a constructor
         return new Node(item);
     }
     // Do this iff traversedNode != null, which it is in this block
     int compare = item.compareTo(traversedNode.item);
        ... 
     // Now you check to see if compare < 0 and compare > 0
     // then you insert your node accordingly and recursively
     // you need to pass the current node left or right as your new traversedNode
     // eg. traversedNode.left = insert( traversedNode.left, item )
   }