我正在尝试从二进制搜索树中删除节点的方法,我知道我的编程逻辑是正确的,但是我无法将我的焦点节点与节点的父节点的左子节点进行比较。它有时必须为null,我应该能够将它与对象进行比较吗?
这是我的代码:
public void deleteNode(Node node) {
if (node.getParent().left().root == node) {
node.getParent().setLeft(null);
} else {
node.getParent().setRight(null);
}
}
因此导致问题的一行是
node.getParent().left().root == node
因为它给出了nullpointerexception。但我知道它应该是null,这是代码的重点。我不想使用带有NullPointerException的try catch,因为它很糟糕
答案 0 :(得分:0)
好的,让我们分析您的代码,因为您没有阅读评论:
public void deleteNode(Node node) {
if (node.getParent().left().root == node) {//this is where you get NullPointerException
node.getParent().setLeft(null);
} else {
node.getParent().setRight(null);
}
}
为什么在if (node.getParent().left().root == node)
行上收到NullPointerException?
您得到它是因为:node.getParent()
等于null
或 node.getParent().left()
等于null
。您无法在null
上调用方法。
假设node.getParent()是null
,在这种情况下,您正在调用null.left()
。
有意义吗?
更改代码以避免NullPointerException
:
if (node.getParent() != null) {
if (node.getParent().left() != null && node.getParent().left().root == node)
node.getParent().setLeft(null);
else
node.getParent().setRight(null);
}
注意: @ user3790046我没有改变你的逻辑。我不知道它是否有意义,我只是添加了相对检查以避免NullPointerException。