老师您好,发现您在给其他人的回复里,出现了这句话:“对于remove的情况,再向上回溯的过程中,有可能出现 getBalanceFator(node.left) == 0的情况。”
对于您这句话,我思考了一下这个问题,发现把getBalanceFator(node.left) == 0 的情况放在LR和RL的情况里整个逻辑跑完结果也是对的。如下所示
//LL:右旋
if( balanceFactor > 1 && getBalanceFactor(retNode.left) > 0) return rightRotate(retNode);
//RR:左旋
if( balanceFactor < -1 && getBalanceFactor(retNode.right) < 0) return leftRotate(retNode);
//LR:先左旋 后右旋
if( balanceFactor > 1 && getBalanceFactor(retNode.left) <= 0 ){
retNode.left = leftRotate(retNode.left);
return rightRotate(retNode);
}
//RL:先右旋 后左旋
if( balanceFactor < -1 && getBalanceFactor(retNode.right) >= 0){
retNode.right = rightRotate(retNode.right);
return leftRotate(retNode);
所以本质是要对于这样的情况进行一定的处理。
但是对删除元素时出现:getBalanceFator(node.left) == 0同时 getBalanceFator(node) > 1,这样的情况没有直观的理解,所以老师您可以举一个例子吗?