📄 平衡二叉树.cpp
字号:
#include<stdlib.h>
#define ElemType int
#define LH +1
#define EH 0
#define RH -1
typedef struct BSTNode{
ElemType data;
int bf;
sruct BSTNode * lchild,* rchild;
}BSTNode,*BSTree;
void R_Rotate(BSTree &p)
{
lc=p->lchild;
p->lchild=lc-rchild;
lc->rchild=p;
p=lc;
}
void L_Rotate(BSTree &p)
{
rc=p->rchild;
p->rchild=rc->lchild;
rc->lchild=p;
p=rc;
}
Status InsertAVL(BSTree & T,ElemType e,Boolean & taller)
{
if(!T)
{
T=(BSTree)malloc(sizeof(BSTNode));
T->bf=EH;
taller=TRUE;
}
else{
if(EQ(e.key,T->data.key))
{
taller=FALSE;
return 0;
}
if(LT(e.key,T-data.key))
{
if(!InsertAVL(T->lchild,e,taller))
return 0;
if(taller)
seitch(T->bf)
{
case LH:
LevBalance(T);
taller=FALSE;
break;
case EH:
T->bf=LH;
taller=TRUE;
break;
case RH:
T->bf=EH;
taller=FALSE;
break;
}//switch(T->bf)
}//if
else{
if(!InsertAVL(T->rchild,e,taller))
return 0;
if(taller)
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;
}//switch
}//else
}//else
return 1;
}//InsertAVL
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:T->bf=RH;lc->bf=EH;break;
case EH:T->bf=lc->bf=EH;
case RH:T->bf=EH;lc->bf=LH;break;
}//switch(lc->bf)
}//LeftBalance
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -