如何从二叉树中删除节点?

时间:2014-06-11 22:28:20

标签: java tree binary-tree

我需要编写一个从二叉树中删除节点的方法。我尝试阅读和利用其他人的问题,有点帮助。事情是我得到一些错误。我有点困惑。

以下是代码:

 String delete(int k)
{
    BSTNode maxfromleft = null;
    BSTNode n = getNode(k);
    BSTNode n1 = n;
    if(n == null) 
        return null;
    if (k < node.getKey())
        n.left.setValue(delete(n.left.getKey()));

    else if(k > node.getKey()){
        n.right.setValue(delete(n.right.getKey()));
    }
    else{
        if(n.right != null && n.left != null){
            maxfromleft = max(n.left);
            n.left.setValue(delete(n.left.getKey()));
            n.setValue(maxfromleft.getValue());
        }
        else if(n.right == null){
            n = n.left;
            return n1.getValue();
        }
        else if(n.left == null){
            n = n.right;
            return n1.getValue();
        }
    }
    return n.getValue();
}


private BSTNode max(BSTNode n) {
    if (n == null)
        return null;
    if (n.right != null)
        return max(n.right);
    return n;
}

我在此行收到NullPointerException错误:

        n.left.setValue(delete(n.left.getKey()));

为什么呢? 我该如何解决这个问题?

所有帮助表示赞赏:)

0 个答案:

没有答案