二进制搜索树无法将节点与null进行比较

时间:2014-10-07 18:06:10

标签: java algorithm tree binary-search-tree

我正在尝试从二进制搜索树中删除节点的方法,我知道我的编程逻辑是正确的,但是我无法将我的焦点节点与节点的父节点的左子节点进行比较。它有时必须为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,因为它很糟糕

1 个答案:

答案 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。