0

我正在研究 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;
     }
}
4

2 回答 2

0

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

但是代码中还有其他问题。我会把它留给你找出来。

于 2012-10-24T04:48:20.497 回答
0

那是因为您在成功插入之前正在从空对象读取参数。你的左右都是空的,所以我会把它留给你弄清楚,但考虑一下。您应该new Node(item)改为插入。如果您的函数是递归的,那么您需要传入当前父节点(根)的引用。这是一个让你上路的框架,希望你能理解代码。

   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 )
   }
于 2012-10-24T04:51:27.610 回答