文章标题

来源:互联网 发布:qq飞车高压数据 编辑:程序博客网 时间:2024/06/10 02:12

AVL树
默写。

#define LH 1#define EH 0#define RH -1typedef struct ssNode{int data;struct Node* left;struct Node* right;int bf;}Node,*BSTree;void L_Rotate(BSTree & T){    BSTree p=T->right;    T->right=p->left;    p->left=T;    T=p;}void R_Rotate(BSTree & T){    BSTree p=T->left;    T->left=p->right;    p->right=T;    T=p;}void LeftBalance(BSTree & T){    BSTree lc=T->left;    switch(lc->bf){        case LH:            lc->bf=T->bh=EH;            R_Rotate(T);break;        case RH:            rd=lc->right;            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->left);        R_Rotate(T);    }}void RightBalance(BSTree & T){    BSTree rc=T->right;    switch(rc->bf){    case RH:        rc->bf=EH;T->bf=EH;        L_Rotate(T);break;    case LH:        BSTree ld=rc->left;        switch(ld->bf){        case LH:        T->bf=EH;rc->bf=RH;break;        case RH:        T->bf=LH;rc->bf=EH;break;        }        ld->bf=EH;        R_Rotate(T->right);        L_Rotate(T);    }}int InsertAVL(BSTree &T,int dat.int &taller){if(!T){T=new Node;T->data=dat;T->left=T->right=NULL;T->bf=EH;taller=1;return 1;}if(dat==T->data)return 0;if(dat<T->data){    if(!InsertAVl(T->left,dat,taller))return 0;    if(taller){        switch(T->bf){            case EH:T->bf=LH;break;            case LH:LeftBalance(T);break;            case RH:T->bf=EH;break;        }    }}else{    if(!InsertAVl(T->right,dat,taller))return 0;    if(taller){        switch(T->bf){            case EH:T->bf=RH;break;            case RH:RightBalance(T);break;            case LH:T->bf=EH;break;        }    }}}
原创粉丝点击