二叉搜索树递归删除

时间:2015-09-28 20:22:10

标签: java recursion binary-tree binary-search-tree

我正在使用二进制搜索树,目前正致力于递归删除方法。我的代码中有一个错误;它会删除没有子节点和一个子节点的节点。尝试删除具有两个子节点的节点时出现问题。 (参考点 - 我用Right Subtree中的最小节点替换已删除的节点)

我的代码是:

//Driver
public void delete (String val){
root = delete(root, val);
}

//Recursive Delete Method   
private static StringNode delete(StringNode node, String v){
        StringNode temp;
        if(node == null){
            return null;
        }
        if(v.compareTo(node.getString()) < 0){
            node.setLeft(delete(node.getLeft(), v));
        }
        else if(v.compareTo(node.getString()) > 0){
            node.setRight(delete(node.getRight(), v));
        }
        else{
            if(node.getLeft() == null){
                node = node.getRight();
            }
            else if(node.getRight() == null){
                node = node.getLeft();
            }
            else{
                node = node.getRight();
                while(node.getLeft() != null){
                    node = node.getLeft();
                }
                node.setRight(delete(node, node.getString()));
            }
        }
        return node;
    }

我已经调试过,看到删除后重新连接节点时丢失了一个孩子。但我不知道如何纠正我的代码。

1 个答案:

答案 0 :(得分:0)

我弄明白了这个错误。我将删除方法分为删除 deleteNode 方法。工作了。