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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

二叉树的遍历.docx

1、二叉树的遍历攀枝花学院本科学生课程设计任务书题目二叉树的遍历及应用1、课程设计的目的1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。3) 使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等) 问题描述 建立二叉树,并输出二叉树的先序、中序和后序遍历序列,以及二叉树的叶子数。实现提示 可通过输入带空格的前序序列建立二叉链表3、主要参考文献1刘大有等,数据结构(C

2、语言版),高等教育出版社2严蔚敏等,数据结构(C语言版),清华大学出版社3William Ford,William Topp,Data Structure with C+清华大学出版社4苏仕华等,数据结构课程设计,机械工业出版社4、课程设计工作进度计划1)分析题目,查阅相关资料:1天;2)算法设计、数据结构设计:1天3)编写代码并调试:1天4)完成课程设计报告:2天指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作

3、刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用

4、能力5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日摘 要二叉树的遍历及应用属于数据结构这门课程的知识, 在二叉树的应用中,常常要

5、求在树中查找具有某种特征的结点,或者对二叉树中全部结点逐一进行某种处理。这样就提出了一个遍历二叉树的问题,即如何按某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。对于二叉树而言,它是一种非线性结构,每个结点都可能有两棵子树,因而需要寻找一种规律,以便使二叉树上的结点能排列在一个线性队列上,从而便于遍历。由二叉树的定义可知,二叉树是由3个部分组成:根结点,左子树,右子树。因此,若能依次遍历这三部分,便是遍历了整个二叉树。若限定先左后右,则只有前三种情况,分别称之为先序遍历,中序遍历,后序遍历,而这三种遍历方法是基于二叉树递归的定义。 关键词:二叉树,遍历,数据结构,线性

6、,递归 摘要 目录 6.1调试运行程序.10 6.2运行结果的说明111 课程设计目的旨在培养我们对学到的课本知识实际解决问题的能力和我们的动手能力,同时加强我们所学知识,是我们掌握得更牢固。在此次二叉树的建立和遍历应用的实验中,主要目的是:熟练掌握树的基本概念、二叉树的基本操作及在链式存储结构上的实现;掌握二叉树的生成、遍历及求深度等算法。同时也需要我们掌握运用递归方式描述算法及编写递归C程序的方法,提高算法分析和程序设计能力。通过课程设计的实践,我们可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。与此同时我们也熟练掌握数据结构这门课程,掌握线性表、栈、队列、串

7、、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用。其次是通过对实验结构流程图图的设计,活跃我们的大脑思维,增强空间想象能力,让整个实验的程序过程更加简单明了,易于理解,对各种画图工具的熟练使用也达到了。总之,通过这次实验,相信我会对数据结构这门课程的知识更加了解,掌握得更深,把以前在这门课程方面的不足弥补到,能重新认识到它的知识魅力所在,这将是我做这个课题后得到的最大收获。2 基本思想在 C语言的环境下,创建一个二叉树,由二叉树的递归定义可知,二叉树是由3个基本单元组成:根结点,左子树,右子树。若能遍历这三部分,便是遍历了整个二叉树。首先,定义一个结构体,左,右孩子指针,同时分为先

8、序遍历,中序遍历,后序遍历,程序的基本算法思想:先序遍历二叉树,若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。中序遍历二叉树,若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。后序遍历二叉树,若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。叶子数的求法则是需要根据用层次遍历的算法,来算出每一层的叶子数,从而统计出整棵树的叶子数。以上就是我做此实验的整个算法的基本思想3 方案设计3.1方案的概要说明用typedef声明TElemType为字符类型,BiNode为结构体类型

9、,该二叉树的先序,中序,后序遍历分别在void PreOrderTraverse(BiTree bt),void InOrderTraverse(BiTree bt),void PostOrderTraverse(BiTree bt)表示的程序中完成整个遍历过程。主函数中依次输出所建立二叉树输出的先序,中序, 后序遍历的结果,叶子数由层次遍历二叉树可得,也由主函数中输出。3.2 二叉树的建立和存储建立二叉树(ABD#G#CE#FH#)。结构定义:typedef struct BiTNode char data; struct BiTNode *lchild,*rchild;BiTNode,*B

10、iTree;经过对该二叉树的遍历,结果分别存储在PreOrder,InOrder,PostOrder中。3.3 数据的测试已建立的二叉树(ABD#G#CE#FH#)先序序列:ABDGCEFH中序序列:DGBAECHF 后序序列:GDBEHFCA 3.4程序结果的输出输出结果的用print()实现,先序序列:ABDGCEFH;中序序列:DGBAECHF;后序序列:GDBEHFCA;二叉树子叶数:3 4 算法设计4.1程序整体流程图构造二叉树,将值赋给bt所指的结点值,接着构造左子树,右子树。在这期间,并判断该二叉树的结点值是否为空,在接下来的程序中依次先序,中序,后序遍历建立的二叉树,最后在主函

11、数中输出所要的结果(图4.1):图4.14.2 先序遍历过程流程图 void PreOrderTraverse(BiTree bt) /先序递归遍历二叉树 if(bt) /bt不空 printf(%c,bt-data); /先访问结点 PreOrderTraverse(bt-lchild); /再先序遍历左子树 PreOrderTraverse(bt-rchild); /最后先序遍历右子树 (图4.2): 图4.24.3 中序遍历过程流程图 void InOrderTraverse(BiTree bt) /中序递归遍历二叉树 if(bt) /bt不空 InOrderTraverse(bt-lc

12、hild); /先中序遍历左子树 printf(%c,bt-data); /再访问结点 InOrderTraverse(bt-rchild); /最后中序遍历右子树 (图4.3)图4.34.4 后序遍历过程流程图void PostOrderTraverse(BiTree bt) /后序递归遍历二叉树if(bt) /bt不空 PostOrderTraverse(bt-lchild); /先后序遍历左子树 PostOrderTraverse(bt-rchild); /然后后序遍历右子树 printf(%c,bt-data); /最后访问结点 (图4.4)图4.45 详细设计程序源代码(C语言)如下

13、:#include stdio.h#include string.htypedef char TElemType ;typedef struct BiNode /定义二叉树节点结构TElemType data; /数据域struct BiNode * lchild ,* rchild; /左右孩子指针域BiNode ,*BiTree;BiTree CreateBiTree(BiTree bt) / 构造二叉链表表示的二叉树bt char ch; BiTree ch=NULL; ch=getchar(); if(ch=#) bt=NULL;/空二叉树btelse / 结点的值不为空 if(bt=

14、(BiNode *)malloc(sizeof(BiNode)=NULL) exit(-2); bt-data=ch; / 将值赋给bt所指结点 bt-lchild=CreateBiTree(h); / 递归构造左子树 bt-rchild=CreateBiTree(h); / 递归构造右子树 return(bt);void PreOrderTraverse(BiTree bt) /先序递归遍历二叉树 if(bt) /bt不空 printf(%c,bt-data); /先访问结点 PreOrderTraverse(bt-lchild); /再先序遍历左子树 PreOrderTraverse(bt

15、-rchild); /最后先序遍历右子树 void InOrderTraverse(BiTree bt) /中序递归遍历二叉树 if(bt) /bt不空 InOrderTraverse(bt-lchild); /先中序遍历左子树 printf(%c,bt-data); /再访问结点 InOrderTraverse(bt-rchild); /最后中序遍历右子树void PostOrderTraverse(BiTree bt) /后序递归遍历二叉树if(bt) /bt不空 PostOrderTraverse(bt-lchild); /先后序遍历左子树 PostOrderTraverse(bt-rc

16、hild); /然后后序遍历右子树 printf(%c,bt-data); /最后访问结点 main()BiTree T; /初始化树T=CreateBiTree(NULL); / 建立二叉树Tprintf(nthe PreOrder is:);PreOrderTraverse(T); / 先序递归遍历二叉树Tprintf(nthe InOrder is:);InOrderTraverse(T); / 中序递归遍历二叉树Tprintf(nPostOrder is:);PostOrderTraverse(T); / 后序递归遍历二叉树T6 调试分析6.1 调试运行程序程序先序遍历二叉树运行结果如

17、下(图6.1):图6.1由运行结果可知:先序序列:ABDGCEFH中序序列:DGBAECHF后序序列:GDBEHFCA6.2 运行结果的说明首先,在编写程序的过程中,整个程序的大体编写比较顺利,就是在编写求叶子数的程序很困难,程序在调试过程中,无错误,但是在进入运行的过程中,无法显示该子叶数,经过多次的调试,改正,始终调试不出叶子显示数。而只有当把有关的程序删除之后,先序便遍历二叉树和中序,后序遍历二叉树都能成功。其结果显示如上图所示。 其次,在画流程图的过程中,由于对于画图工具的使用不熟悉,导致所需时间比较多,同时画出来的图没有达到非常标准。与此同时,在源代码中,对定义二叉树的结构和用指针表

18、示的那一段,由于有些是自己借鉴过来的,并不是很懂,程序如下:typedef struct BiNode /定义二叉树节点结构TElemType data; /数据域struct BiNode * lchild ,* rchild; /左右孩子指针域BiNode ,*BiTree;BiTree CreateBiTree(BiTree bt) / 构造二叉链表表示的二叉树bt char ch; BiTree ch=NULL; ch=getchar(); if(ch=#) bt=NULL;/空二叉树btelse / 结点的值不为空 if(bt=(BiNode *)malloc(sizeof(BiNo

19、de)=NULL) exit(-2); bt-data=ch; / 将值赋给bt所指结点 bt-lchild=CreateBiTree(h); / 递归构造左子树 bt-rchild=CreateBiTree(h); / 递归构造右子树 return(bt);自己掌握得还不是很熟悉,通过自己翻查课本,网上查找有关相似程序源代码和请教同学,最终把它掌握得比较好,并熟知了程序的每一个步骤。7 课程设计总结此次实验课题,遇到了很多问题,主要在对知识的掌握不牢固和程序的一些理解上的错误,造成了在程序的编写过程中有些地方重复了很多次和实验流程图的多次校正。首先,二叉树的先序,中序,后序遍历的程序编写还比

20、较顺利,但是对求叶子数程序的编写过程中,由于自己对此知识掌握得不是特别牢固,在这上面花费的时间比较多。同时自己也没有放弃在这方面的努力,在查找书本知识,上网找资料和同学们的帮助下,自己也很好的完成了该程序的编写。然后,在此次实验中的画流程图过程中,主要原因由于自己在过往平时的实验中没有在这方面引起重视,导致了自己在这方面的生疏和不足,实验流程图多次修改,最终在自己参考课本和研究程序的基础上,终于画出了令自己比较满意的图。整个实验过程,我最感觉深刻的就是,这份实验课题完成得很不容易,虽然是自己在做实验之初就下定决心要将它做好在这次实验中,不仅提高我对学到的课本知识实际解决问题的能力和动手能力,同

21、时也加强我对所学知识的了解:熟练掌握了树的基本概念、二叉树的基本操作及在链式存储结构上的实现和掌握二叉树的生成、遍历及求深度等算法,同时更好的掌握了编写C程序的方法,提高了我自己的算法分析和程序设计能力。通过自己发现问题和自己的不足,我做到了努力的去解决在实验课题中出现的问题,让我知道了此次实验在自己的努力完成之下,它也并不是我想象中的那么难。同时让我熟悉了数据结构中的很多知识和一些画图上的技巧,确实是让我收益颇多,使得我对这次的自己做实验的过程有一种珍惜的感觉,真正的明白了一份努力一份收获的道理。 参 考 文 献1 严蔚敏等,数据结构题集,清华大学出版社,20052 严蔚敏等,数据结构(C语言版),清华大学出版社,20033 马利克晏海华,C+编程数据结构与程序设计方法,电子工业出版社,20034 刘大有等,数据结构课程设计高等教育出版社,20045 宫纪明,实用数据结构,安徽大学出版社,20056 张铭,数据结构与算法,高等教育出版社,20057 余绍军,数据结构,中南大学出版社,2004

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

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