老师您好!
①在BST删除元素的那个算法中,我不是很清楚老师写的那个算法中的递归终止条件是什么(没有像平时那样很清楚的写出来,也许是我太菜 -.-)
②在①的基础上我仔细思考想像之前那样明显的表现出递归终止条件,并结合BST添加算法中递归条件的简化那个想法,写出了以下程序,总体思想是根据:左右两边是空时这两种情况是Hibbard Deletion的特例。代码如下不知是否正确(测试了感觉因该没问题)
public void remove(E e){
root = remove(root, e);
}
private Node remove(Node node, E e){
//递归终止条件部分
if( node == null )
return null;
if( e.compareTo(node.e) == 0 ) {
//根据空也是一棵树,我们把待删除结点的后继分成空和非空两种情况考虑
if(node.right == null) {
return removeMin(node);
} else {
Node successor = minimum(node.right);
successor.right = removeMin(node.right);
successor.left = node.left;
node.left = node.right = null;
return successor;
}
}
//递归部分
if( e.compareTo(node.e) < 0 ){
node.left = remove(node.left,e);
return node;
} else {
node.right = remove(node.right, e);
return node;
}
}