【发布时间】:2015-05-31 16:29:03
【问题描述】:
我正在尝试编写一种从二叉搜索树中删除节点的方法。这是我删除节点的方法。
public void delete(int deletionNodeValue) {
Node<Integer> nodeToBeDeleted = getNode(deletionNodeValue);
if(nodeToBeDeleted == null) return; // No node with such value exists throw an error
if(isLeafNode(nodeToBeDeleted)) {
nodeToBeDeleted = null;
} else if (nodeToBeDeleted.getNumChildren() == 1) {
bypassNode(nodeToBeDeleted);
}else {
replace(nodeToBeDeleted, getSuccessor(nodeToBeDeleted.getValue()));
}
}
我在一个叶子节点上检查了这个方法,虽然在调试之后我发现nodeToBeSelected=null的执行发生了,这个节点实际上并没有被删除。因为我仍然可以搜索已删除的值,并且程序仍然设法获取它。
tree.add(5);
tree.delete(5);
System.out.println(tree.getNode(5).getValue()); // Output : 5, should've been deleted
这是我的 getNode() 方法
public Node<Integer> getNode(int searchValue) {
Node<Integer> currentNode = root;
while(currentNode != null) {
int currentNodeValue = currentNode.getValue();
if(searchValue == currentNodeValue)
return currentNode;
else if(searchValue < currentNodeValue)
currentNode = currentNode.getLeftChild();
else
currentNode = currentNode.getRightChild();
}
// if no node with given value is found
return null;
}
getNode() 方法是否按值返回找到的节点?如何让它返回引用并直接操作找到的节点?
【问题讨论】:
标签: java algorithm reference binary-search-tree