请问switch((*T->bf)为什么是T原来的平衡度,这个时候T不是已经插入成功了吗?不应该是插入新结点后的平衡度吗
void InsertAVL(BiTree *T,int e, bool *taller){
if(!*T)
{ //1.插入新结点,树“长高”,置taller为TRUE
//开辟一个新结点T;
*T=(BiTree)malloc(sizeof(BiTNode));
// 对新结点T的data赋值,并且让其左右子树指向为空,T的BF值为EH;
(*T)->data=e;
(*T)->lc=(*T)->rchild=NULL;
(*T)->bf=EH;
//新结点默认"长高"
*taller=TRUE;
}
else
{
if (e==(*T)->data)
{ //2.树中已存在和e有相同关键字的结点则不再插入
*taller=FALSE;
return FALSE;
}
if (e<(*T)->data)
{
//3.应继续在T的左子树中进行搜索
if(!InsertAVL(&(*T)->lc,e,taller))
//未插入
return FALSE;
//4.已插入到T的左子树中且左子树“长高”
if(*taller)
//5.检查T的平衡度
switch((*T)->bf)
{
case LH:
//原本左子树比右子树高,需要作左平衡处理
LeftBalance(T);
*taller=FALSE;
break;
case EH:
//原本左、右子树等高,现因左子树增高而使树增高
(*T)->bf=LH;
*taller=TRUE;
break;
case RH:
//原本右子树比左子树高,现左、右子树等高
(*T)->bf=EH;
*taller=FALSE;
break;
}
}
else
{ //6.应继续在T的右子树中进行搜索
//未插入
if(!InsertAVL(&(*T)->rc,e,taller))
return FALSE;
//已插入到T的右子树且右子树“长高”
if(*taller)
// 检查T的平衡度
switch((*T)->bf)
{
//原本左子树比右子树高,现左、右子树等高
case LH:
(*T)->bf=EH;
*taller=FALSE;
break;
//原本左、右子树等高,现因右子树增高而使树增高
case EH:
(*T)->bf=RH;
*taller=TRUE;
break;
// 原本右子树比左子树高,需要作右平衡处理
case RH:
RightBalance(T);
*taller=FALSE;
break;
}
}
}
return TRUE;
}