可能我的表达方式不太好,其实我是想知道以下这段代码
else { //key.compareTo(node.key)==0
//待删除节点左子树为空情况
if (node.left == null) {
Node rightNode = node.right;
node.right = null;
size--;
retNode = rightNode;
}
//待删除节点右子树为空情况
else if (node.right == null) {
Node leftNode = node.left;
node.left = null;
size--;
retNode = leftNode;
}
else {
......
为啥BST的时候不做if和else的优化,跑测试用例就没出问题,但是跑AVL树的时候的时候就出问题了呢
以下是没优化过的BST的代码——————————————————else { //key.compareTo(node.key)==0
//待删除节点左子树为空情况
if(node.left==null){
Node rightNode=node.right;
node.right=null;
size--;
return rightNode;
}
//待删除节点右子树为空情况
if (node.right==null){
Node leftNode=node.left;
node.left=null;
size--;
return leftNode;
}
//待删左右子树均不为空
//找到待删节点的后继
//下面是本节的核心代码
Node successor =minimum(node.right);//successor后继
successor.right=removeMin(node.right);//这里已经size--了
//size++;//真较真要+回来
successor.left=node.left;
node.left=node.right=null;
//size--;//两相抵消可以不写
return successor;