ImageVerifierCode 换一换
你正在下载:

静静.docx

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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

静静.docx

1、静静内蒙古科技大学本科生课程设计论文题 目:数据结构课程设计二叉树遍历及应用学生姓名:李文静学 号:1176807345专 业:计算机科学与技术班 级:计2011-3班指导教师:康懿2013年 5 月 28 日内蒙古科技大学课程设计任务书课程名称数据结构课程设计设计题目二叉树的遍历和应用指导教师周李涌、康懿、兰孝文时间2013.5.152013.5.29一、教学要求1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力4. 训练用系统的观点和软件

2、开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。二叉树的遍历和应用以二叉链表表示二叉树,在此基础上实现对二叉树的遍历和应用。要求设计类(或类模板)来描述二叉树,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:v 创建二叉树v 输出二叉树v 二叉树的先序、中序、后序遍历v 二叉树的按层遍历v 统计二叉树的叶子结点、计算二叉树的深度 并设计主函数测试该类(或类模板)。三、设计要求及成果1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使

3、其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告四、进度安排资料查阅与讨论(1天)系统分析(2天)系统的开发与测试(5天)编写课程设计说明书和验收(2天)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问六、建议参考资料1数据结构 (C语言版)严蔚敏、吴伟民 主编 清华大学出版社 2004.112数据结构课程设计案例精编(用C/C+描述),

4、李建学 等 编著,清华大学出版社 2007.23.数据结构:用面向对象方法与C+语言描述,殷人昆 主编,清华大学出版社 2007.61. 功能设计(1) 创建二叉树利用二叉树模板类,创建二叉树时产生类模板,调用类的构造函数来创建,修改二叉树的结构时,可以调用赋值语句直接把广义表转换成二叉树。相关类或函数如下:class BinaryTree;BinaryTree();BinaryTree& operator=(const string& str);(2) 先序递归遍历若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。相关函数如下:void PreOrde

5、rTraverse(const BinaryTreeNode* p) const;(3) 中序递归遍历若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。相关函数如下:void InOrderTraverse(const BinaryTreeNode* p) const;(4) 后序递归遍历若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。相关函数如下:void PostOrderTraverse(const BinaryTreeNode* p) const;2. 算法流程图(5) 创建二叉树图2-1 创建二叉树(6

6、) 先序递归遍历图2-2 前序递归遍历(7) 中序递归遍历 图2-3 中序递归遍历(8) 后序递归遍历图2-4 后序递归遍历3问题描述题目 建立二叉树并先序、中序、后序、层次遍历、深度、叶子个数。问题描述要求能够按先序遍历次序输入二叉树中结点的值来构造二叉树T;然后用递归算法实现二叉树T 的先序遍历,中序遍历,后序遍历,按层次遍历,;接着编写算法实现求二叉树T中指定结点的路径,即从键盘输入二叉树T 的任一结点,可以输出从根结点到该结点所经历的结点;最后编写二叉树的二个应用算法(求二叉树的深度、求二叉树的叶子结点个数)。 基本要求分别建立二叉树存储结构的输入输出函数、输出,先序遍历,中序遍历,后

7、序遍历,按层次遍历函数、指定节点路径函数、求深度函数、叶子结点个数函数。一、需求与规格说明 1、定义二叉树的存储结构,每个结点中设置三个域,即值域、左指针域、右指针域。要建立二叉树T的链式存储结构,即建立二叉链表。根据输入二叉树结点的形式不同,建立的方法也不同,本系统采用先序序列递归建立二叉树,建立如下图所示的二叉树。应该在程序运行窗口的主控菜单后,先选择“1”并回车,紧接着在程序运行窗口中提示信息“输入二叉树的先序序列结点值:”之后,采用以下字符序列:abcdegf (以替代空格,但是程序中直接输入空格就是,详细见代码注释)作为建立二叉树T的输入字符序列并回车,窗口出现:二叉树的链式存储结构

8、建立完成!图1 二叉树的图形结构 2、二叉树的遍历。本系统采用递归中序遍历算法进行遍历,需要在程序运行窗口的主控菜单中选择“2” 并回车,程序运行窗口会出现以下中序遍历序列:该二叉树的先序、中序、后序、层次遍历序列是: abcdegf cbegdfa cgefdba abcdefg3、求二叉树的深度。在程序运行窗口的主控菜单中选择“4” 并回车,在会得到结果为:该二叉树的深度为:54、求二叉树的叶子结点个数。在程序运行窗口的主控菜单中选择“5” 并回车,在会得到结果为:该二叉树的叶子结点数为:35、退出程序。在程序运行窗口的主控菜单中选择“0” 并回车。退出程序。4. 详细设计 (1)设计思想

9、创建二叉树,采用递归算法进行先序、中序、后序、层次遍历,以及求解二叉树的深度,和树的叶子数。(2)设计表示为实现上述的设计思想,首先要定义二叉树的链式存储结构,我们采用二叉链表的方式,相应的类型说明为:class BiTNode/二叉树的二叉链表存储public: char data; BiTNode *lchild,*rchild;public: BiTNode() data=NULL; lchild=NULL; rchild=NULL; BiTNode() ;typedef BiTNode* BiTree;(3)函数接口说明:int CreateBiTree(BinTree &T) /1.

10、按照先序遍历次序递归建立二叉树int PreOrder(BiTree T);/2.二叉树递归中序遍历算法int Inorder(BinTree bt) /3.二叉树递归中序遍历算法int PostOrder(BiTree T);/4.二叉树递归中序遍历算法int LevelTravel(BiTree T);/5.二叉树递归中序遍历算法int Depth(BinTree T) /6.求二叉树的深度int Leaf(BinTree T)/ 7.求二叉树的叶子结点个数(4)函数调用关系如图所示:(5)实现注释 二叉树的创建模块: 按照先序遍历次序递归建立二叉树,通过读入的字符,分配存储空间生成新结点

11、后再逐个构建根结点、左子树和右子树。二叉树先序遍历模块:采用递归先序遍历算法,先逐步扫描二叉树的根结点,然后扫描左子树,如果左子树为空,然后再扫描右子树,然后再重复上面的步骤扫描该分支的左子树,直至整棵二叉树都扫描完成。此时输出的序列便是该二叉树的先序遍历序列。语句注释见代码。二叉树中序遍历模块:采用递归中序遍历算法,先逐步扫描二叉树的左子树,如果左子树为空,然后根结点,然后再扫描右子树,然后再重复上面的步骤扫描该分支的左子树,直至整棵二叉树都扫描完成。此时输出的序列便是该二叉树的中序遍历序列。语句注释见代码。二叉树后序遍历模块:采用递归后序遍历算法,先逐步扫描二叉树的左子树,如果左子树为空,

12、然后再扫描右子树,然后根结点,然后再重复上面的步骤扫描该分支的左子树,直至整棵二叉树都扫描完成。此时输出的序列便是该二叉树的后序遍历序列。语句注释见代码。求二叉树的深度模块:通过判断左右孩子结点是否存在,如存在(h不等于零),则有一个孩子h加一,然后比较左右孩子结点数大小,较大的为树的深度。具体见代码。求二叉树的叶子结点个数模块:判断左右子树的叶子结点是否存在,如存在,则记下,左 后返回左右子树叶子结点的和。具体见代码。(6)调试报告编程的最初阶段,在case4语句中,缺少break,使得每次执行case4的时候,自动弹出该二叉树的叶子节点数,经过调试后发现,原来是缺少了break,补上之后,

13、程序正常运行。其实这只是很小的问题!在调试中,还有很多的问题,如果在这里一一列举,恐怕很难写完。具体的看运行结果5. 运行结果截图二叉树的创建:图表 2二叉树的遍历结果:图表 3二叉树的深度:图表 4二叉树的叶子结点数:图表 56. 总 结(1)心得体会在课程设计这一期间,遇见一些重要的问题,其中的一些小的问题,通过上网查询和讨论以及询问同学不算太难,但是其中一个就是怎样后序非递归遍历二叉树,经过一番试探,以及仔细的分析和斟酌,最后终于得到一个令人比较满意的程序,使得每一次的编译都能保留上一次的结果,使得这个程序变得有一点意义,更接近于现实的应用。另外,还有一些怎样去查找或者删除程序也同样不容

14、易。针对任何程序算法是不可忽略的,但是有一些关键词也是很重要的,他们在其中也起着决定性的作用。总之遇到问题则会共进退。这一次的课程设计给我们提供了一个既能动手又动脑,独立实践的机会,我们就应该紧紧抓住这个机会把我们的所学的专业课程进一步的巩固和加深,进一步培养我们的综合能力。灵活运用各种数据类型组成一个具有系统性的程序。我们的任务就是提高、提高、再提高对于选择这个题目,起初,我们没有一点头绪,经过查阅各种资料和上网查询,以及多方面的了解,认识由浅入深,慢慢的形成一个轮廓,头脑逐渐清晰,虽然头脑渐渐地浮现一些新颖问题,但是就因为这样反复的解决新问题,学到了许多以前忽略的小问题小细节,同时因为这也

15、使我们思考的深度增加了许多,许多零碎知识的积累也越来越接近质的变化,总之是获益匪浅。同时这次的课程设计也让我们知道学习不仅要学份内的东西,还要学习一些对我们的能力有很大提高的事情;不仅要牢牢掌握基础知识,还要有所偏爱有所研究,并且还要多看书拓展自己的知识面。多一些勤奋,少一些懒惰,或许以后就可以少受十倍的罪。早期的鸟儿有食吃,笨鸟先飞,只有现在加强自己的训练,相信不久的将来,肯定有一块不错的天空供自己飞翔。在这之中,虽然每个人的思路不一样,但是合作就该有合作的诚意,只有合理的分工,拿一颗真诚热心去探讨问题才能更好的解决问题,这样的合作会使我们的效果更上一层楼。开心的合作,愉快的交谈,问题不再迷

16、茫,一起解决问题,成功会因合作而发芽,会因合作而有深意。(2) 参考文献:1严蔚敏,吴伟民.数据结构(C 语言版).北京:清华大学出版社,2010 2严蔚敏,吴伟民等.数据结构题集(C 语言版).北京:清华大学出版社,2010 3苏仕华等.数据结构 程设计.北京:机械工业出版社,2008 7. 程序清单#define ok 1/函数结果状态代码#define error 0#define OVERFLOW -1#define STACKCRE 10#include#include#include#includeclass BiTNode/二叉树的二叉链表存储public: char data;

17、 BiTNode *lchild,*rchild;public: BiTNode() data=NULL; lchild=NULL; rchild=NULL; BiTNode() ;typedef BiTNode* BiTree;class BT private: BiTree root;public: BT() root=NULL; BT() int CreateBiTree(BiTree & T);/ void Print(BiTree T); int PreOrder(BiTree T); int InOrder(BiTree T); int PostOrder(BiTree T); i

18、nt LevelTravel(BiTree T); int BiTreeDepth(BiTree T); int Leaf(BiTree T);int BT:CreateBiTree(BiTree & T)/创建二叉树 /按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树 /构造二叉链表表示的二叉树T char ch; ch=getchar(); if(ch= )T=NULL; else if(!(T=(BiTNode *)malloc(sizeof(BiTNode)exit(OVERFLOW); T-data=ch; /生成根结点 CreateBiTree(T-lchild); /

19、构造左子树 CreateBiTree(T-rchild); /构造右子树 return ok;/void BT:Print()int BT:PreOrder(BiTree T)/先序遍历 if(T!=NULL) coutdata; PreOrder(T-lchild); PreOrder(T-rchild); return ok;int BT:InOrder(BiTree T)/中序遍历 if(T!=NULL) InOrder(T-lchild); coutdata; InOrder(T-rchild); return ok; int BT:PostOrder(BiTree T)/后序遍历 i

20、f(T!=NULL) PostOrder(T-lchild); PostOrder(T-rchild); coutdata; return ok;int BT:LevelTravel(BiTree T)/按层遍历 BiTree q20; int rear=0,front=0; BiTree p; if(T) qrear=T; rear=(rear+1)%20; while(rear!=front) p=qfront; front=(front+1)%20; coutdata; if(p-lchild) qrear=p-lchild; rear=(rear+1)%20; if(p-rchild)

21、 qrear=p-rchild; rear=(rear+1)%20; return ok;int BT:BiTreeDepth(BiTree T)/ 求二叉树的深度(后序遍历) int h1,h2; if(T=NULL)return 0; else h1=BiTreeDepth(T-lchild); h2=BiTreeDepth(T-rchild); return h1h2?h1+1:h2+1; int BT:Leaf(BiTree T)/求二叉树的叶子数(先序遍历) if(!T) return 0; else if(!T-lchild&!T-rchild) coutdatalchild)+L

22、eaf(T-rchild); int main() BiTNode * C; BT first; cout创建二叉树:endl; first.CreateBiTree(C); int i; while(i) cout ttt 数据结构课程设计-二叉树的遍历与应用 endl; cout ttt-endl; cout ttt 1: 先序、中序、后序、层序遍历二叉树: endl; cout ttt 2: 二叉树的深度: endl; cout ttt 3: 二叉树的叶子结点数: endl; cout ttt 0: 结束退出程序 endl; cout ttt-endl; cout ttt 请选择: ;

23、cout i; switch(i) case 1:cout先序、中序、后序、层序遍历分别为:endl; first.PreOrder(C); coutendl; first.InOrder(C); coutendl; first.PostOrder(C); coutendl; first.LevelTravel(C); coutendl; break; case 2:cout二叉树的深度:endl; coutfirst.BiTreeDepth(C)endl; coutendl; break; case 3:cout二叉树的叶子结点数:endl; coutfirst.Leaf(C)endl; c

24、outendl; break; case 0:coutnn(*_*) 李文静 计算机11-3班 学号:1176807345nnnendl; break; return ok;目录1. 功能设计 1(1) 创建二叉树 1(2) 先序递归遍历 1(3) 中序递归遍历 1(4) 后序递归遍历 12. 算法流程图 2(1) 创建二叉树 2(2) 先序递归遍历 3(3) 中序递归遍历 4(4) 后序递归遍历 53问题描述 6(1)设计思想 7(2)设计表示 7(3)函数接口说明: 8(4)函数调用关系如图所示: 8(5)实现注释 9(6)调试报告 105. 运行结果截图 106. 总 结 12(1)心得体会 12(2)参考文献: 137. 程序清单 14致谢感谢我的老师们,他们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样。感谢同学们对我的帮助和指点。

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

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