博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
平衡二叉树—own版
阅读量:6650 次
发布时间:2019-06-25

本文共 4042 字,大约阅读时间需要 13 分钟。

#include
using namespace std;const int LH=1;const int RH=-1;const int EH=0;struct BitNode{ int data; int bf; BitNode *lchild,*rchild;};void L_Rotate(BitNode *&p){ BitNode *R=p->rchild; p->rchild=R->lchild; R->lchild=p; p=R;}void R_Rotate(BitNode *&p){ BitNode *L=p->lchild; p->lchild=L->rchild; L->rchild=p; p=L;}void LeftBalance(BitNode *&p){ BitNode *L,*Lr; L=p->lchild; switch(L->bf) { case LH://LL型 p->bf=L->bf=EH; R_Rotate(p); break; case RH://LR型 Lr=L->rchild; switch(Lr->bf) { case LH://左子树右孩子的 左边 p->bf=RH; L->bf=EH; break; case EH: p->bf=L->bf=EH; break; case RH: p->bf=EH; L->bf=LH; break; } Lr->bf=EH; L_Rotate(p->lchild); R_Rotate(p); } } void RightBalance(BitNode *&p)//调整+更新 p 的平衡因子bf { BitNode *R,*RL; R=p->rchild; switch(R->bf) { case RH://RR型 R->bf=p->bf=EH; L_Rotate(p); break; case LH://RL型 RL=R->lchild; switch(RL->bf) { case LH://左子树右孩子的 左边 p->bf=EH; R->bf=RH; break; case EH: p->bf=R->bf=EH; break; case RH: p->bf=LH; R->bf=EH; break; } RL->bf=EH; R_Rotate(p->rchild); L_Rotate(p); } }bool InsertAvl(BitNode *&p,int e,bool &taller){ if(p==NULL) { p=new BitNode(); p->data=e; p->lchild=p->rchild=NULL; p->bf=EH; taller=true; } else { if(e==p->data) { taller=false; return false; } if(e
data) { if(!InsertAvl(p->lchild,e,taller)) return false; if(taller) { switch(p->bf) { case LH://插入前P的状态(bf) LeftBalance(p); taller=false; break; case EH: p->bf=LH; taller=true; break; case RH: p->bf=EH; taller=false; break; } } } else { if(!InsertAvl(p->rchild,e,taller)) return false; if(taller) { switch(p->bf) { case LH: p->bf=EH; taller=false; break; case EH: p->bf=RH; taller=true; break; case RH: RightBalance(p); taller=false; break; } } } } return true; }print(const BitNode *p) { if(p!=NULL) { cout<
data; if(p->lchild!=NULL||p->rchild!=NULL) { cout<<"("; print(p->lchild); if(p->rchild!=NULL) { cout<<","; print(p->rchild); } cout<<")"; } }} int main(){ int a[]={
1,2,3,4,5,6,7,8,9,0,10}; bool taller; BitNode *bt=NULL; for(int i=0;i<11;i++) InsertAvl(bt,a[i],taller); print(bt); cout<
--------------------- 作者:林凤g 来源:CSDN 原文:https://blog.csdn.net/fengyanglian/article/details/49637745 版权声明:本文为博主原创文章,转载请附上博文链接!
 

 

转载于:https://www.cnblogs.com/shenyuling/p/10071944.html

你可能感兴趣的文章
Python标准库——走马观花
查看>>
Decode Ways
查看>>
关于字符串指针不可修改的问题
查看>>
DEFT Linux 7.2,数字取证工具箱
查看>>
CentOS 6.3(x86_32)下安装Oracle 10g R2
查看>>
《x86/x64体系探索及编程》图书信息
查看>>
【Android】drawable—hdpi、drawable—mdpi、drawable—ldp
查看>>
Hibernate 参数设置一览表
查看>>
AppBox v2.0 发布了!
查看>>
Java 基础【03】TCP
查看>>
中文字体在CSS中的表达方式
查看>>
转义字符符号及对应的含义
查看>>
返回顶部的js实现
查看>>
回顾各种编码的创新和异同-MEPG2, MPEG4, H.264/AVC以及H.265/HEVC比较(转)
查看>>
PowerShell批量重启计算机
查看>>
【转贴】短息分类和短信接收指令
查看>>
extjs form 取值 赋值 重置
查看>>
C# 委托一(委托基础)
查看>>
Object 保存到文件中
查看>>
性能测试之计算性能
查看>>