我正在为必须返回已删除节点的二叉搜索树实现delete方法。
当删除的节点有两个子节点时,我在返回已删除节点时遇到问题。要删除具有两个子节点的节点,将后继节点复制到已删除节点,并进行递归调用以删除后继节点。后继作为已删除的节点返回,当前调用也返回后继,因为我“删除”了一个实例变量。
我实际上认为更大的问题是删除不应该是实例变量。我把它变成了一个实例变量,因为我的方法需要返回一些东西,并且由于某种原因它总是会到达最后一个return语句。这就是我将“删除”一个实例变量的原因。显然,每次调用覆盖“删除”都不是正确的方法,所以我的“解决方案”并没有真正让我到处都是。有什么指针吗?
// Case 3: internal node, two children
else {
BSTNode succ = currRoot.findMin(currRoot,
currRoot.getRChild());
// currRoot is a right child
if (currRoot.getPerson().getKey() >=
parent.getPerson().getKey()) {
deleted = new Person(currRoot.getPerson().getName(),
currRoot.getPerson().getKey());
// copying successor to current node
currRoot.getPerson().
setKey(succ.getPerson().getKey());
currRoot.getPerson().
setName(succ.getPerson().getName());
deleteHelper(currRoot, currRoot.getRChild(),
succ.getPerson().getKey(),
succ.getPerson().getName());
return deleted;
}
// currRoot is a left child
else {
deleted = new Person(currRoot.getPerson().getName(),
currRoot.getPerson().getKey());
// copying successor to current node
currRoot.getPerson().setKey(succ.getPerson().getKey());
currRoot.getPerson().setName(succ.getPerson().
getName());
deleteHelper(currRoot, currRoot.getRChild(),
succ.getPerson().getKey(),
succ.getPerson().getName());
return deleted;
}
}
return deleted; // I don't know why my code reaches here, but I know this is
// what the last recursive call is returning. That's why
// I made deleted an instance variable