关于平衡二叉树的一句代码不是很理解,
程序代码:
void LeftBalance(PBSTree* T)
{
PBSTree lc,rd;
lc = (*T)->lchild;
switch (lc->bf)
{
case LH:
(*T)->bf = lc->bf = EH;
R_Rotate(T);
break;
case RH:
rd = lc->rchild;
switch(rd->bf)
{
case LH:
(*T)->bf = RH;
lc->bf = EH;
break;
case EH:
(*T)->bf = lc->bf = EH;
break;
case RH:
(*T)->bf = EH;
lc->bf = LH;
break;
}
rd->bf = EH;
L_Rotate(&(*T)->lchild);
R_Rotate(T);
break;
}
}
在第二层switch中 的 case EH 这句代码 我并不理解。因为如果要执行左平衡,那树的深度是肯定要改变的(但树的深度改变并不一定就会执行左平衡),但是rd->bf=EQ 就意味着深度没有改变 在我看来是不会出现这种情况的啊,还是我哪里理解错了?