版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、树和二叉树以下问题要求统一在一个大程序里解决。10、按先序遍历的扩展序列建立二叉树的存储构造11、二叉树先序、中序、后序遍历的递归算法12、二叉树中序遍历的非递归算法13、二叉树层次遍历的非递归算法14、求二叉树的深度(后序遍历)15、建立树的存储构造16、求树的深度17、源程序代码:/tree.cpp:Definestheentrypointfortheconsoleapplication./#includestdafx.h#includestdio.h#includestdlib.h#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10#defin
2、eOK1#defineERROR0#defineTRUE1#defineFALSE0#defineOVERFLOW-1typedefcharTElemType;/元素数据类型typedefintStatus;/*二叉链表储存构造*/typedefstructBiTNodeTElemTypedata;structBiTNode*lchild,*rchild;BiTNode,*BiTree;boolCreateBiTree(BiTree&T)/先序序列建立二叉树charch;scanf(%c,&ch);if(ch=*)T=NULL;elseif(!(T=(BiTNode*)malloc(sizeo
3、f(BiTNode)returnERROR;T-data=ch;CreateBiTree(T-lchild);CreateBiTree(T-rchild);returnOK;StatusPrintElement(TElemTypee)/访问函数printf(%c,e);returnOK;StatusPreOrderTraverse(BiTreeT,Status(*Visit)(TElemType)/先序遍历二叉树的递归算法if(T)if(Visit(T-data)if(PreOrderTraverse(T-lchild,Visit)if(PreOrderTraverse(T-rchild,Vi
4、sit)returnOK;returnERROR;elsereturnOK;StatusInOrderTraverse(BiTreeT,Status(*Visit)(TElemType)/中序遍历二叉树的递归算法if(T)if(InOrderTraverse(T-lchild,Visit)if(Visit(T-data)if(InOrderTraverse(T-rchild,Visit)returnOK;returnERROR;elsereturnOK;StatusPostOrderTraverse(BiTreeT,Status(*Visit)(TElemType)/后序遍历二叉树的递归算法i
5、f(T)if(PostOrderTraverse(T-lchild,Visit)if(PostOrderTraverse(T-rchild,Visit)if(Visit(T-data)returnOK;returnERROR;elsereturnOK;/*栈存储构造及操作*/typedefstructBiTree*base;BiTree*top;intstacksize;Stack;StatusInitStack(Stack&S)/构造空栈S.base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree);if(!S.base)exit(OVERFLOW
6、);S.top=S.base;S.stacksize=STACK_INIT_SIZE;returnOK;StatusGetTop(StackS,BiTree&e)/读栈顶元素if(S.top=S.base)returnERROR;e=*(S.top-1);returnOK;StatusPush(Stack&S,BiTreee)/入栈if(S.top-S.base=S.stacksize)S.base=(BiTree*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(BiTree);if(!S.base)exit(OVERFLOW);S.to
7、p=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;returnOK;StatusPop(Stack&S,BiTree&e)/出栈if(S.top=S.base)returnERROR;e=*-S.top;returnOK;StatusStackEmpty(StackS)/判栈空if(S.base=S.top)returnTRUE;elsereturnFALSE;StatusInOrderTraverse2(BiTreeT,Status(*Visit)(TElemType)/中序遍历二叉树的非递归算法StackS;BiTreep
8、;InitStack(S);Push(S,T);while(!StackEmpty(S)while(GetTop(S,p)&p)Push(S,p-lchild);Pop(S,p);if(!StackEmpty(S)Pop(S,p);if(!Visit(p-data)returnERROR;Push(S,p-rchild);returnOK;#defineMAXLEN100voidLevelOrderTraverse(BiTreeT,Status(*Visit)(TElemType)/层次遍历二叉树structnodeBiTreevecMAXLEN;intf,r;q;q.f=0;q.r=0;if
9、(T!=NULL)Visit(T-data);q.vecq.r=T;q.r=q.r+1;while(q.flchild!=NULL)Visit(T-lchild-data);q.vecq.r=T-lchild;q.r=q.r+1;if(T-rchild!=NULL)Visit(T-rchild-data);q.vecq.r=T-rchild;q.r=q.r+1;intBiTreeDepth(BiTreeT)/求二叉树的深度intdepthval,depthLeft,depthRight;if(!T)depthval=0;elsedepthLeft=BiTreeDepth(T-lchild);d
10、epthRight=BiTreeDepth(T-rchild);depthval=1+(depthLeftdepthRight?depthLeft:depthRight);returndepthval;/*树的二叉链表储存构造*/typedefstructCSNodeTElemTypedata;structCSNode*firstchild,*nextsibling;CSNode,*CSTree;/*队列存储构造及操作*/typedefstructQNodeCSTreedata;structQNode*next;QNode,*QueuePtr;typedefstructQueuePtrfron
11、t;QueuePtrrear;LinkQueue;StatusInitQueue(LinkQueue&Q)/构造空队列Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);if(!Q.front)exit(OVERFLOW);Q.front-next=NULL;returnOK;StatusDestoryQueue(LinkQueue&Q)/销毁队列while(Q.front)Q.rear=Q.front-next;free(Q.front);Q.front=Q.rear;returnOK;StatusEnQueue(LinkQueue&Q,CSTreee
12、)/入队QueuePtrp;p=(QueuePtr)malloc(sizeof(QNode);if(!p)exit(OVERFLOW);p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;returnOK;StatusDeQueue(LinkQueue&Q,CSTree&e)/出队QueuePtrp;if(Q.front=Q.rear)returnERROR;p=Q.front-next;e=p-data;Q.front-next=p-next;if(Q.rear=p)Q.rear=Q.front;free(p);returnOK;StatusGetHead
13、(LinkQueue&Q,CSTree&e)/读队头QueuePtrp;if(Q.front=Q.rear)returnERROR;p=Q.front-next;e=p-data;returnOK;CSTreeGetTreeNode(TElemTypee)/建立树的孩子/-兄弟链表结点CSTreep;p=(CSTree)malloc(sizeof(CSNode);if(!p)exit(OVERFLOW);p-data=e;p-firstchild=NULL;p-nextsibling=NULL;returnp;StatusCreatTree(CSTree&T)/建立树的孩子/-兄弟链表char
14、first=,second=;intresult=0;LinkQueueQ;CSTreep,s,r;InitQueue(Q);T=NULL;for(scanf(%c%c,&first,&second);second!=#;result=scanf(%c%c,&first,&second)p=GetTreeNode(second);EnQueue(Q,p);if(first=#)T=p;elseGetHead(Q,s);while(s-data!=first)DeQueue(Q,s);GetHead(Q,s);if(!(s-firstchild)s-firstchild=p;r=p;elser-
15、nextsibling=p;r=p;returnOK;intTreeDepth(CSTreeT)/求树的深度inth1,h2;if(!T)return0;elseh1=TreeDepth(T-firstchild);h2=TreeDepth(T-nextsibling);return(h1+1)h2)?(h1+1):h2);intmain(intargc,char*argv)BiTreetestT;printf(请输入二叉树先序序列如AB*C*:);CreateBiTree(testT);printf(n);printf(二叉树的深度是:);printf(%d,BiTreeDepth(testT);printf(n);printf(先序递归遍历顺序:);PreOrderTraverse(testT,PrintElement);printf(n);printf(中序递归遍历顺序:);InOrderTraverse(testT,PrintElement);printf(n);printf(后序递归遍历顺序:);PostOrderTraverse(testT,PrintElement);printf(n);printf(层次非递归遍历顺序:);LevelOrderTraverse(testT,PrintElement
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海南铺面租赁合同书电子版
- 合同产生质量事故考核
- 2024高考政治一轮复习课时练16中国特色社会主义最本质的特征含解析新人教版
- 2024年高考生物二轮复习第一篇专题6考向3生物的进化和生物多样性学案
- 完美国际黄昏圣殿装备属性、所需材料系列介绍(武器篇)投
- 2024购买服务的合同协议书
- 2024新疆事业编制合同到期后单位可以选择不续签
- 2024机动车辆保险合同样本
- 2024北京市猪肉入市场厂挂钩合同范本
- 2024消防工程改造合同
- 20200310公园安全风险辨识清单
- 华中科技大学官方信纸
- 60立方油罐容积细表
- WI-QA-02-034A0 灯具成品检验标准
- 农业信息技术 chapter5 地理信息系统
- 部编版六年级上语文阅读技巧及解答
- 斯派克max操作手册
- 项目四 三人表决器ppt课件
- 结合子的机械加工工艺规程及铣槽的夹具设计
- 林武樟 完整阳宅讲义 笔记版[方案]
- 《会滚的汽车》ppt课件
评论
0/150
提交评论