| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2110 人关注过本帖
标题:平衡二叉树[原创]
取消只看楼主 加入收藏
kings169524
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-5-5
收藏
 问题点数:0 回复次数:0 
平衡二叉树[原创]

这个东东就是要花一点时间画图研究。 以下是我的代码。 写得差请见谅 #include <status.h>

typedef struct BT{ int data; struct BT* l; struct BT* r; int bl; BT(int d); }BT;

BT::BT(int d){ l=r=NULL; data=d; bl=0; }

void clear(BT* p){ if(p){ clear(p->l); clear(p->r); delete(p); } }

void print(BT* p){ cout<<"data="<<p->data<<'\t'<<"bl="<<p->bl<<endl; }

void f_p(BT* T){ if(T!=NULL){ print(T); f_p(T->l); f_p(T->r); } }

void m_p(BT* T){ if(T!=NULL){ m_p(T->l); print(T); m_p(T->r); } }

void Trans(BT* T){ cout<<"\nfront trans:\n"; f_p(T); cout<<endl; cout<<"\nmid trans:\n"; m_p(T); cout<<endl; }

void Rotate_1(BT* &p){ BT* T=p->l; p->bl=0; T->bl=0; p->l=T->r; T->r=p; p=T; }

void Rotate_2(BT* &p){ BT* T=p->l->r; if(T->bl==0){ p->l->bl=p->bl=0; } else{ if(T->bl==1){ p->bl=-1; } else{ p->l->bl=1; } } p->l->r=T->l; T->l=p->l; p->l=T->r; T->r=p; p=T; }

void Rotate_3(BT* &p){ BT* T=p->r; p->bl=T->bl=0; p->r=T->l; T->l=p; p=T; }

void Rotate_4(BT* &p){ BT* T=p->r->l; if(T->bl==0){ p->r->bl=p->bl=0; } else{ if(T->bl==1){ p->r->bl=-1; } else{ p->bl=1; } } p->r->l=T->r; T->r=p->r; p->r=T->l; T->l=p; p=T; }

void Avl_Tree(BT* &p){ if(p->bl==2){ if(p->l->bl==1) Rotate_1(p); else Rotate_2(p); } else{ //p->bl==-2 if(p->r->bl==-1) Rotate_3(p); else Rotate_4(p); } }

status _Insert(int d,BT* &p,short int &f,short int &af){ if(!p){ p=new BT(d); f=SUCCESS; return TRUE; } else{ if(d>p->data){ if(_Insert(d,p->l,f,af)){ if(!p->r) af=TRUE; else{ af=FALSE; p->bl++; } } if(af==TRUE){ p->bl++; if(p->bl==2){ Avl_Tree(p); af=FALSE; } } } else if(d<p->data){ if(_Insert(d,p->r,f,af)){ if(!p->l) af=TRUE; else{ af=FALSE; p->bl--; } } if(af==TRUE){ p->bl--; if(p->bl==-2){ Avl_Tree(p); af=FALSE; } } } else{ f=FAILE; } return FALSE; } }

status Insert(int d,BT* &p){ short int f=SUCCESS; short int af=FALSE; _Insert(d,p,f,af); return f; }

void t1(){ BT* p=NULL; int d=1; cout<<"insert data="; cin>>d; while(d!=0){ if(Insert(d,p)) cout<<"\tInsert success"<<endl; else cout<<"\tInsert failed"<<endl; cout<<"insert data="; cin>>d; } Trans(p); getch(); clear(p); }

void main(){ t1(); }

搜索更多相关主题的帖子: 二叉树 
2005-05-06 15:09
快速回复:平衡二叉树[原创]
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021665 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved