ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:134.09KB ,
资源ID:12015854      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12015854.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整word版二叉树的遍历课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整word版二叉树的遍历课程设计.docx

1、完整word版二叉树的遍历课程设计课 程 设 计课程设计名称: 数据结构课程设计 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 数据结构 专业课程设计任务书学生姓名专业班级学号题 目二叉树的遍历课题性质A工程设计课题来源D自拟课题指导教师同组姓名无主要内容要求能够输入树的各个结点,并能够输出遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、遍历序列的函数任务要求1. 用单链表建树,一个一个的建立2. 你能够实现插入和删除3. 实现先序中序后序递归遍历4. 实现先序中序后序非递归遍历5. 显示出层次遍历的结果参考文献谭浩强.C程序设计M.北京:清华

2、大学出版社. 2005.数据结构课本,数据结构ppt审查意见指导教师签字:教研室主任签字: 2011年 12月 10 日 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一、 需求分析1.1课程设计题目、任务及要求二叉树。用链表作存储结构 (1)对二叉树作各种遍历,输出结果; (4)输入元素x,查找二叉树的左孩子,右孩子,如果找到则删除该结点,没有找到就退出,返回错误。1.2课程设计思想建立二叉树采用一个一个输入的方式。对二叉树进中序遍历采用递归函数和非递归函数分别实现多种遍历的方式。另外还有层次遍历,来充分实现本书对树的遍历。删除结点函数,采用边查找边删除的

3、方式。如果没有查找到,则不对树做任何的修改;如果查找到结点则删除。一、 系统总体设计3.1 系统模块划分二叉树是一种动态树表。开辟一个空间建立一个节点,逐个加入,逐个建立。利用查找函数,对数进行插入删除利用书中所学知识进行各种遍历,包括将所有方法归并在一起,还要建立查看界面一边有系统的视觉效果。3.2 二叉树的生成过程二叉树的生成,采用逐个建立的方式。如图 3.3 主要功能模块设计程序主要设计了五个功能:首先是创建二叉排序树,完成后出现任务菜单,菜单中设计了四个模块:退出,中序遍历,计算平均查找长度和删除结点。主函数流程如下: 图3.1.1主函数流程图 4 系统详细设计4.1 主函数菜单模块

4、该模块功能主要是给用户提供清晰的可操作界面,易于人机操作,并能很好的调用其他各模块,使程序更加优化,丝路更加清晰,结构更加明了,提高了程序的实用性。其算法如下:void main() int n,m=1; BiTree t; while(m) menu(); scanf(%d,&n); switch(n) case 1:/*初始化*/ int flag; datatype x; printf(请输入头结点 x:n); scanf(%d,&x); flag=Initiate(&t,x); if(flag=1) printf(n初始化成功!); else printf(n初始化失败!); brea

5、k; case 2: printf(n请继续添加结点建立二叉树);/*建树*/ break; case 3:/*插入结点x作为a的左孩子*/ datatype a,x;/*x作为a的左孩子*/ BiTree parent=t; printf(请输入双亲a和左孩子x:n); scanf(%d%d,&a,&x); parent=Find(parent,a); parent=InsertL(t,x,parent); if(parent!=NULL) t=parent; break; case 4:/*插入结点x作为a的右孩子*/ datatype a,x;/*x作为a的右孩子*/ BiTree pa

6、rent=t; printf(请输入双亲 a and右孩子 x:n); scanf(%d%d,&a,&x); parent=Find(parent,a); parent=InsertR(t,x,parent); if(parent!=NULL) t=parent; break; case 5:/*删除结点a的左孩子*/ datatype a; BiTree parent=t; printf(please input a:n); scanf(%d,&a); parent=Find(parent,a); parent=DeleteL(t,parent); if(parent!=NULL) t=pa

7、rent; break; case 6:/*删除结点a的左孩子*/ datatype a; BiTree parent=t; printf(please input a:n); scanf(%d,&a); parent=Find(parent,a); parent=DeleteR(t,parent); if(parent!=NULL) t=parent; break; case 7:/*递归先序遍历*/ PreOrder(t); break; case 8:/*递归中序遍历*/ InOrder(t); break; case 9:/*递归后序遍历*/ PostOrder(t); break;

8、case 10:/*层次遍历*/ LevelOrder(t); break; case 11:/*先序遍历的非递归实现*/ NRPreOrder(t); break; case 12:/*中序遍历的非递归实现*/ NRInOrder(t); break; case 13:/*后序遍历的非递归实现*/ NRPostOrder(t); break; case 0:m=0; 4.2 查找模块 该模块是给用户提供查找功能。其查找过程是:若二叉排序树为空,则查找失败,结束查找,;否则,将要查找的值与二叉排序树根结点的值进行比较,若相等,则查找成功,结束查找,返回被查找到结点的地址,若不等,则根据要查找的

9、值与根结值的大小关系决定时到根结点的左子树还是右子树中继续查找(查找过程同上),直到查找成功或者查找失败为止。其算法如下:BiTree Find(BiTree parent,datatype a) BiTree p; if(parent=NULL) p=NULL; else if(parent-data=a)查找根结点 p=parent; else p=Find(parent-lchild,a);递归方法查找左孩子 if(p=NULL) p=Find(parent-rchild,a);递归方法查找右孩子 return p;4.3 层次遍历模块 层次遍历是从根结点一个一个从上到下 从左到右按顺序

10、遍历出来的,这里我利用队列的先进先出特点,来实现此功效 void LevelOrder(BiTree bt) BiTree QueueMAXNODE; int front,rear; if(bt=NULL) return; front = -1; rear = 0; Queuerear = bt; while(front!=rear) front+; printf(%5d,Queuefront-data); if(Queuefront-lchild!=NULL) rear+; Queuerear=Queuefront-lchild; if(Queuefront-rchild!=NULL) re

11、ar+; Queuerear=Queuefront-rchild; /end while 4.4 中序遍历模块(以中序为例来说明) 遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。二叉树共有三个部分组成,即根结点,根结点的左子树,根结点的右子树。限定以从左至右方式共有三种遍历方式,即前序遍历,中序遍历,后序遍历。中序遍历的原则:若被遍历的二叉树为非空,则依次执行如下操作:A)以中序遍历方式遍历左子树;B)访问根结点;C)以中序遍历方式遍历右子树。其算法如下:void InOrder(BiTree bt)递归 if

12、(bt=NULL) return; InOrder(bt-lchild); printf(%5d,bt-data); InOrder(bt-rchild);非递归 void NRPreOrder(BiTree bt) BiTree stackMAXNODE,p; int top; if(bt=NULL) printf(Tree is empty!n); return; top=-1; p=bt; while(p!=NULL)|(top!=-1) while(p!=NULL) printf(%5d,p-data); if(top=MAXNODE-1) printf(Stack overflow!

13、n); return; /* end if */ else top+; stacktop=p; /* end if-else */ p=p-lchild; /* end while p */ p=stacktop; top-; p=p-rchild; /* end while p & top */ 5 测试结果建立二叉树为(层次)6 4 8 2 3 7 9先序遍历(递归非递归)中序遍历(递归和非递归)后序遍历(递归和非递归)6 总 结通过这次课程设计我也着实又感受了一次编程的乐趣,从中也学到了不少知识。我在学习运用数据结构编程之前,并没能深刻体会到这一点,直到这次课程设计,我才有所领悟。这次实验中我也出现过一些错误。这是我对基本概念二叉树和二叉排序树理解的模糊不清造成的。我原以为只要采用一个个输入的建立二叉排序树后来在老师的指点下我意识到自己的错误。不过收获也很不少。我也发现两者在很多函数上是互通的,只需稍作修改即可移植。总之,我会继续我的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步不断提高的。参考文献1 谭浩强.C程序设计M.北京:清华大学出版社. 2005.2 数据结构课本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1