数据结构实验:SDUT2482二叉排序树+3374平衡二叉树
来源:互联网 发布:126邮箱imap端口 编辑:程序博客网 时间:2024/06/11 11:38
SDUT3374
平衡二叉树的思路和代码参考清华版《数据结构》,但是对于其中的LR型以及RL型的调整不太明白。虽然书上没有给出右平衡调整的代码但是可以根据左平衡的对称性写出来。
#include<cstdio>#include<cstring>#define LH +1#define RH -1#define EH 0using namespace std;const int maxn=25;int n,a;bool taller;typedef struct BSTNode{ int data,bf; struct BSTNode *lch,*rch;}BSTNode,*BSTree;void R(BSTree &T){ BSTree lc=T->lch; T->lch=lc->rch; lc->rch=T; T=lc;}void L(BSTree &T){ BSTree rc=T->rch; T->rch=rc->lch; rc->lch=T; T=rc;}void LB(BSTree &T){ BSTree lc=T->lch; switch(lc->bf){ case LH: T->bf=lc->bf=EH; R(T); break; case RH: BSTree rd=lc->rch; 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(T->lch); R(T); }}void RB(BSTree &T){ BSTree rc=T->rch; switch(rc->bf){ case RH: T->bf=rc->bf=EH; L(T); break; case LH: BSTree ld=rc->lch; switch(ld->bf){ case LH: T->bf=LH; rc->bf=EH; break; case EH: T->bf=rc->bf=EH; break; case RH: T->bf=EH; rc->bf=RH; break; } ld->bf=EH; R(T->rch); L(T); }}int Insert(BSTree &T,int e,bool &taller){ if(!T){ T=new BSTNode; T->data=e; T->lch=NULL; T->rch=NULL; T->bf=EH; taller=true; } else{ if(T->data==e){ taller=false; return 0; } if(e<T->data){ if(!Insert(T->lch,e,taller)) return 0; if(taller){ switch(T->bf){ case LH: LB(T); taller=false; break; case EH: T->bf=LH; taller=true; break; case RH: T->bf=EH; taller=false; break; } } } else{ if(!Insert(T->rch,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: RB(T); taller=false; break; } } } } return 1;}int main(){ while(scanf("%d",&n)!=EOF){ BSTree bt=new BSTNode; bt=NULL; taller=false; for(int i=0;i<n;i++){ scanf("%d",&a); Insert(bt,a,taller); } printf("%d\n",bt->data); } return 0;}/***************************************************User name: RockyResult: AcceptedTake time: 0msTake Memory: 160KBSubmit time: 2017-11-25 23:58:12****************************************************/
SDTU2482
#include<cstdio>#include<cstring>#include<string>using namespace std;const int maxn=50;int n;char a[maxn],b[maxn],a1[maxn],b1[maxn];typedef struct BSTNode{ int data; struct BSTNode *lch,*rch;}BSTNode,*BSTree;int Binsert(BSTree &T,int data){ if(!T){ BSTree b=new BSTNode; b->data=data; b->lch=NULL; b->rch=NULL; T=b; } else if(data<T->data){ Binsert(T->lch,data); } else if(data>T->data){ Binsert(T->rch,data); }}int first(BSTree T,char *a,int i){ if(T){ first(T->lch,a,i+1); a[i]=T->data; first(T->rch,a,strlen(a)-1); }}void help(char *s,char *s2){ BSTree bt=new BSTNode; bt=NULL; int length=strlen(s); for(int i=0;i<length;i++){ Binsert(bt,s[i]); } first(bt,s2,0);}bool judge(char *a,char *b,int length,int i){ while(i<length){ if(a[i]==b[i]) i++; else return false; } return true;}int main(){ while(scanf("%d",&n)!=EOF){ if(n==0) break; scanf("%s",a); int length=strlen(a); help(a,a1); for(int i=0;i<n;i++){ scanf("%s",b); help(b,b1); /*for(int i=0;i<length;i++) printf("%c",b1[i]);*/ if(judge(a1,b1,length,0)) printf("YES\n"); else printf("NO\n"); } } return 0;}/***************************************************User name: RockyResult: AcceptedTake time: 0msTake Memory: 164KBSubmit time: 2017-11-25 20:23:20****************************************************/
阅读全文
0 0
- 数据结构实验:SDUT2482二叉排序树+3374平衡二叉树
- 数据结构-二叉排序树,平衡二叉树,键树
- 数据结构.平衡二叉树.从二叉排序树到平衡二叉树
- 二叉排序树 平衡二叉树
- SDUT2482二叉排序树
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- 3374 数据结构实验之查找二:平衡二叉树
- 3374-数据结构实验之查找二:平衡二叉树
- 3374 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- 二叉排序树和平衡二叉树
- 二叉排序树、二叉平衡树算法
- 平衡二叉树之二叉排序树
- 二叉排序树和平衡二叉树
- 二叉排序树与平衡二叉树
- 二叉排序树和平衡二叉树
- 二叉排序树转平衡二叉树
- 明德扬FPGA-培训班公开课-第03期-《算法的verilog实现》第2次课
- java百科
- Git命令学习
- 关于laravel(5.5)访问public报错解决方法
- HDU 1242
- 数据结构实验:SDUT2482二叉排序树+3374平衡二叉树
- flask简单认识
- 自动装箱/拆箱机制
- Linux查看物理CPU个数、核数、逻辑CPU个数
- opencv HSV 颜色模型(H通道取值 && CV_BGR2HSV_FULL与CV_BGR2HSV的区别)
- boost.asio openssl zlib protobuf icu vs2015编译
- 都是前端,月薪10k和月薪20K以上到底有什么区别??
- DNS
- elasticsearch 官方文档