[英]Binary Search Tree Recursive Delete
I'm working on Binary Search Trees, and currently working on recursive delete method. 我正在研究二进制搜索树,目前正在研究递归删除方法。 I have a bug in my code;
我的代码中有一个错误; it deletes nodes with no children and with one-child.
它删除没有子节点和一个子节点的节点。 Problem arises when trying to delete node with two children.
尝试删除有两个孩子的节点时出现问题。 (Point of reference - I am replacing deleted node with smallest node in Right Subtree)
(参考点-我用Right Subtree中的最小节点替换了已删除的节点)
My code is: 我的代码是:
//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;
}
I have debugged and see that I lose a child when re-connecting the nodes after deletion. 我已经调试,看到删除后重新连接节点时我失去了一个孩子。 But I don't know how to correct in my code.
但是我不知道如何在我的代码中更正。
I figured out the bug. 我发现了这个错误。 I separated the delete method into delete and deleteNode methods.
我将delete方法分为delete和deleteNode方法。 Worked out.
解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.