AVL平衡二叉树的疑问?
在严蔚敏的数据结构中,关于二叉排序树的平衡,有这么一个函数,有点看不明白,
//左树减去右树等于平衡因子
#define LH 1
#define EH 0
#define RH -1
typedef struct s_tree_t{
int data;//数据
int bf;//平衡因子
struct s_tree_t * lchild;
struct s_tree_t * rchild;
}BSTree;
void LeftBalance(BSTree &t) {
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://(1)
t->bf = RH;
lc->bf = EH;
break;
case EH:
t->bf = lc->bf = EH;
break;
case RH://(2)
t->bf = EH;
lc->bf = LH;
break;
}
rd->bf = EH;
L_Rotate(t->lchild);
R_Rotate(t->rchild);
break;
}
}