我有一个包含节点的二叉搜索树。每个节点包含一个键值和数据值,并且节点按键排序。我正在尝试编写一个方法从我的BST中删除一个对象提供了一个密钥。这里是代码:从递归删除中获取对象Java
public Object remove(Comparable theKey) {
return remove(theKey, rootPtr).data;
}
public Node remove(Comparable theKey, Node node) {
Object o;
if(node == null)
return node;
if(theKey.compareTo(node.key) < 0) {
// go to left subtree
node.leftChild = remove(theKey, node.leftChild);
}else if(theKey.compareTo(node.key) > 0) {
//go to the right subtree
node.rightChild = remove(theKey, node.rightChild);
}else if(theKey.compareTo(node.key) == 0) {
if(node.leftChild != null && node.rightChild != null){
Node foundNode = findMin(node.rightChild);
node.key = foundNode.key;
node.data = foundNode.data;
node.rightChild = remove(node.key, node.rightChild);
}else{
if(node.leftChild != null){
node = node.leftChild;
}else{
node = node.rightChild;
}
}
}
numNodes--;
return node;
}
我想返回与DELETED节点相关的数据值。我遇到的问题是:在公共对象remove()方法中,返回的值是不是始终是根节点的数据值?我相信会发生这种情况,因为从第二个方法返回的最终调用将是对rootPtr(根指针)的引用。如果是这种情况,我怎样才能从被删除的节点保存数据?
我认为你会好得多重组这个。如果算法不是递归的,它会更清晰和更容易理解。您可以迭代搜索树中的右键,存储该值,删除节点并替换其左侧或右侧子节点,然后返回存储的值。 – 2014-10-17 20:11:17