我正在使用二进制搜索树,目前正致力于递归删除方法。我的代码中有一个错误;它会删除没有子节点和一个子节点的节点。尝试删除具有两个子节点的节点时出现问题。 (参考点 - 我用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;
}
我已经调试过,看到删除后重新连接节点时丢失了一个孩子。但我不知道如何纠正我的代码。
答案 0 :(得分:0)
我弄明白了这个错误。我将删除方法分为删除和 deleteNode 方法。工作了。