我正在研究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;
}
}
答案 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 )
}