2 回答
TA贡献1783条经验 获得超4个赞
当 getBeforeHelper 方法找到带有您的键的元素时,它会尝试获取左边的元素。如果您的左元素不存在,那将不起作用。在这种情况下,getBeforeHelper 返回为 null 的“current”。在这种情况下,您对该空元素调用 get() 并获得空指针异常。
TA贡献1776条经验 获得超12个赞
看起来您最终会遇到以下情况:
// this yields null
// v v
assertTrue(i - 1 == bst.search(i).getBefore().get());
// ^ ^
// attempt to access a method belonging to a null reference
考虑以下情况,在 中getBeforeHelper,您有:
node != null(总是true在引起麻烦的测试中)
node.data == key(true当您到达Node您正在寻找的位置时)
node.left == null (想想看:什么时候会发生?)
在这种情况下,您实际上最终得到了该getBeforeHelper方法的以下主体(通过丢弃else您通过if测试的所有块并丢弃if测试失败的块的所有内容):
public Node getBeforeHelper(Node node, K key) {
Node current = null;
if(node != null) { // true
if(node.data == key) { // true
if(node.left != null) { // false
}
}
}
return current;
}
嗯,就在那里,你回来了null。
稍后,尝试null.get()在您的断言中进行评估。
剩下要做的就是了解这种情况究竟何时发生并找到另一种非失败的方法来处理它!我在上面给出了一些提示,但既然你真的在学习,我会让你弄清楚细节:)。
添加回答
举报