




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安徽工程大学数 据 结 构课 程 设 计 说 明 书学生姓名:刘超学 号:3120702109学 院:计算机与信息学院专 业:信息与计算科学题 目:二叉树的创建和遍历指导教师潘海玉2014年8月25日目录1. 需求分析-12. 概要设计-13. 详细设计-34. 调试分析-95. 课程总结-106. 附录 -121. 需求分析问题描述:根据运行时输入的先序序列,创建一棵二叉树,分别对其 进行先序、中序、后序、层序遍历,并显示遍历结果。void CreateBTree(BTree &T) /按先序次序输入,构造二叉树void PreOrder(BTree T) /递归先序遍历void InOrder(BTree T) /递归中序遍历void PostOrder(BTree T) /递归后序遍历void LevelOrder(BTree T) /层序遍历void NRPreOrder(BTree bt) /非递归先序遍历void NRInOrder(BTree bt) /非递归中序遍历void NRPostOrder(BTree bt) /非递归后序遍历void main() /二叉树的建立与遍历实现2.概要设计此次课程设计遍历算法的框架图层序遍历遍历算法递归遍历非递归遍历先序遍历中序遍历后序遍历先序遍历中序遍历后序遍历 此次课程设计所用的三组二叉树 AACBCB DFEEFDGHABFGCDEH本设计所使用的存储结构:typedef char ElemType;/定义二叉树结点值的类型为字符型typedef struct bnode/二叉链表结构定义ElemType data;struct bnode *lchild,*rchild;Bnode,* BTree;typedef struct BTree ptr; int tag;stacknode;3.详细设计void CreateBTree(BTree &T)/按先序次序输入,构造二叉链表表示的二叉树T,#表示空树char ch;ch=getchar(); if(ch=#) T=NULL;/读入#时,将相应节点指针置空elseif(!(T=(Bnode *)malloc(sizeof(Bnode) printf(创建失败!);/生成结点空间T-data=ch;CreateBTree(T-lchild);/构造二叉树的左子树CreateBTree(T-rchild);/构造二叉树的右子树void PreOrder(BTree T)/递归先序遍历if(T)printf(%c ,T-data);PreOrder(T-lchild);PreOrder(T-rchild);void InOrder(BTree T)/递归中序遍历if(T)InOrder(T-lchild);printf(%c ,T-data);InOrder(T-rchild);void PostOrder(BTree T)/递归后序遍历if(T)PostOrder(T-lchild);PostOrder(T-rchild);printf(%c ,T-data);void LevelOrder(BTree T)/层序遍历BTree QMAX;int front=0,rear=0;BTree p;if(T) /根结点入队Qrear=T;rear=(rear+1)%MAX; while(front!=rear)p=Qfront; /队头元素出队front=(front+1)%MAX; printf(%c ,p-data);if(p-lchild) /左孩子不为空,入队Qrear=p-lchild;rear=(rear+1)%MAX;if(p-rchild) /右孩子不为空,入队Qrear=p-rchild;rear=(rear+1)%MAX;void NRPreOrder(BTree bt)/非递归先序遍历BTree stackMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top0) while(p!=NULL) printf(%c,p-data);stacktop=p;/预留p指针在数组中top+;p=p-lchild; if (top0) top-; p=stacktop; p=p-rchild;/*左子树为空,进右子树*/void NRInOrder(BTree bt)/非递归中序遍历BTree stackMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top0)while(p!=NULL) stacktop=p; /预留p指针在数组中top+;p=p-lchild; if (top0)top-; p=stacktop;printf(%c,p-data); p=p-rchild;/*左子树为空,进右子树*/void NRPostOrder(BTree bt)/非递归后序遍历 stacknode sMAX,x; BTree p=bt;int top;if(bt!=NULL) top=0;p=bt;dowhile (p!=NULL) /遍历左子树stop.ptr = p; stop.tag = 1; /标记为左子树top+;p=p-lchild;while (top0 & stop-1.tag=2)x = s-top;p = x.ptr;printf(%c,p-data); /tag为R,表示右子树访问完毕,故访问根结点 if (top0)stop-1.tag =2; /遍历右子树p=stop-1.ptr-rchild; while (top0);4.调试分析 一组测试树 运行时界面 5.课程总结这个程序的代码较为简单,可以实现了二叉树的三种递归遍历算法和三种非递归遍历算法还有层序遍历算法,想要改进的话可以在选择功能上下手,建立的时候提示更人性化,对输入的数据进行有效性验证,也可以改进为对遍历算法进行选择等等。二叉树这个数据结构几乎在每一本的数据结构的书都作为重点内容讲述,足见其在算法和程序设计界的重要地位。但是,到目前为止,自己还没有真正体验到它的威力,可能是学习的还不够深刻。像二叉树遍历的算法,用递归的算法只是简单的几行代码,然后就可以实现输出遍历次序。对于非递归的思想,要用到栈这个数据结构,但是对于二叉树遍历问题来说非递归要较递归复杂。程序一开始总是出现语法错误,改了很多次也上网查了相关资料,才最后改为现在可以成功运行的程序。在这个过程中,我体会到开发工程师的感觉了,就是要用挑剔的眼光想问题并且不断地改进自己的程序。通过这次课程设计逐渐提高了自己的程序设计和调试能力,通过上机实习,严整自己设计算法的正确性,学会了有效利用基本调试方法,查找出代码中的错误并且修改。我会继续我的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步和提高。6.附录#include #include #include#define MAX 10 /结点个数不超过10个typedef char ElemType;/定义二叉树结点值的类型为字符型typedef struct bnode/二叉链表结构定义ElemType data;struct bnode *lchild,*rchild;Bnode,* BTree;void CreateBTree(BTree &T)/按先序次序输入,构造二叉链表表示的二叉树T,#表示空树char ch;ch=getchar(); if(ch=#) T=NULL;/读入#时,将相应节点指针置空elseif(!(T=(Bnode *)malloc(sizeof(Bnode) printf(创建失败!);/生成结点空间T-data=ch;CreateBTree(T-lchild);/构造二叉树的左子树CreateBTree(T-rchild);/构造二叉树的右子树void PreOrder(BTree T)/递归先序遍历if(T)printf(%c ,T-data);PreOrder(T-lchild);PreOrder(T-rchild);void InOrder(BTree T)/递归中序遍历if(T)InOrder(T-lchild);printf(%c ,T-data);InOrder(T-rchild);void PostOrder(BTree T)/递归后序遍历if(T)PostOrder(T-lchild);PostOrder(T-rchild);printf(%c ,T-data);void LevelOrder(BTree T)/层序遍历BTree QMAX;int front=0,rear=0;BTree p;if(T) /根结点入队Qrear=T;rear=(rear+1)%MAX; while(front!=rear)p=Qfront; /队头元素出队front=(front+1)%MAX; printf(%c ,p-data);if(p-lchild) /左孩子不为空,入队Qrear=p-lchild;rear=(rear+1)%MAX;if(p-rchild) /右孩子不为空,入队Qrear=p-rchild;rear=(rear+1)%MAX;void NRPreOrder(BTree bt)/非递归先序遍历BTree stackMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top0) while(p!=NULL) printf(%c,p-data);stacktop=p;/预留p指针在数组中top+;p=p-lchild; if (top0) top-; p=stacktop; p=p-rchild;/*左子树为空,进右子树*/void NRInOrder(BTree bt)/非递归中序遍历BTree stackMAX,p;int top;if (bt!=NULL)top=0;p=bt;while(p!=NULL|top0)while(p!=NULL) stacktop=p; /预留p指针在数组中top+;p=p-lchild; if (top0)top-; p=stacktop;printf(%c,p-data); p=p-rchild;/*左子树为空,进右子树*/typedef struct BTree ptr; int tag;stacknode;void NRPostOrder(BTree bt)/非递归后序遍历 stacknode sMAX,x; BTree p=bt;int top;if(bt!=NULL) top=0;p=bt;dowhile (p!=NULL) /遍历左子树stop.ptr = p; stop.tag = 1; /标记为左子树top+;p=p-lchild;while (top0 & stop-1.tag=2)x = s-top;p = x.ptr;printf(%c,p-data); /tag为R,表示右子树访问完毕,故访问根结点 if (top0)stop-1.tag =2; /遍历右子树p=stop-1.ptr-rchild; while (top0);void main()/主函数BTree T;T=NULL;int select;while(1)printf(nnn请选择要执行的操作:n);printf(1.创建二叉树n);printf(2.二叉树的递归遍历算法(前、中、后)n);printf(3.二叉树的层次遍历算法n);printf(4.二叉树的非递归遍历算法(前、中、后)n); printf(0.退出n);printf(输入:); cinselect;switch(select)case 0:return;case 1:printf(n请按先序次序输入各结点的值,以#表示空树(输入时可连续输入):n);CreateBTree(T);break;case 2:if(!T) printf(n未建立树,请先建树!);elseprintf(nn递归先序遍历:n);PreOrder(T);printf(n递归中序遍历:n);InOrder(T);printf(n递归后序遍历:n);Po
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年高中语文 第2单元 置身诗境缘景明情 10 登岳阳楼教学设计 新人教版选修《中国古代诗歌散文欣赏》
- 九年级物理上册 第一章 分子动理论与内能 2 内能和热量教学设计 (新版)教科版
- 九年级化学上册 第七单元 燃料及其利用 课题1 燃烧和灭火示范教学设计 (新版)新人教版
- 6 徽 章(教学设计)苏教版二年级下册综合实践活动
- 2024-2025学年高中生物 专题2 课题3 分解纤维素的微生物的分离教学设计 新人教版选修1
- 16《宇宙的另一边》教学设计-2023-2024学年三年级下册语文统编版
- 2023三年级英语上册 Module 3 Places and activities Unit 9 In my room教学设计 牛津沪教版(三起)
- Unit 5 China and the World. Topic 3 Now it is a symbol of England Section D 教学设计 2024-2025学年仁爱科普版英语九年级下册
- 一年级语文上册 第六单元 课文2 语文园地六教学设计 新人教版
- 《活动6 我的鞋子真干净》(教案)-2024-2025学年三年级上册劳动北师大版
- 药物研发监管的国际协调
- 生猪屠宰兽医卫生检验人员理论考试题及答案
- DL-T5434-2021电力建设工程监理规范
- 2024年上海核工程研究设计院股份有限公司招聘笔试冲刺题(带答案解析)
- 房地产营销毕业论文
- GB/T 43943-2024船舶环境噪声
- 材料力学-第五章弯曲应力
- 2023-2024学年下学期高一思想政治课《心理健康与职业生涯》期中模拟考试卷答案
- 我的人工智能导论职业规划
- 幼儿园沙水区培训活动
- 山东省潍坊市2023-2024学年一年级下学期期中质量检测数学试题
评论
0/150
提交评论