- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
河南城建学院
数据结构
课程设计说明书
题目: 遍历二叉树
院 系: 计算机科学与工程系
专业班级: 0614082
学 号: 061408263
学生姓名: 闫建明
同 组 人: 金 强
指导教师: 张延红
2010年6月25日
目 录
一、 需求分析 2
1. 主功能模块 2
2. 创建树模块 2
3. 遍历树模块 2
二、 概要设计 3
1. 功能设计 3
(1) 创建二叉树 3
(2) 先序递归遍历 3
(3) 中序递归遍历 3
(4) 后序递归遍历 3
(5) 先序非递归遍历 3
(6) 中序非递归遍历 4
(7) 后序非递归遍历 4
(8) 层序非递归遍历 4
2. 算法流程图 4
三、 详细设计 12
1. 界面设计 12
2. 详细代码分析 14
(1) 主模块 14
(2) 创建树模块 15
(3) 遍历树模块 16
(4) 源程序清单 16
3. 调试分析 35
(1) 调试结果 35
(2) 算法分析 36
四、 心得体会 37
五、 参考文献 38
需求分析
在现实世界层次化的数据模型中,数据与数据之间的关系纷繁复杂。其中很多关系无法使用简单的线性结构表示清楚,比如祖先与后代的关系、整体与部分的关系等。于是人们借鉴自然界中树的形象创造了一种强大的非线性结构——树。树形结构的具体形式有很多种,其中最常用的就是二叉树。而二叉树的多层次遍历遍历则是二叉树的重要内容。
本程序用Microsoft Visual C++ 6.0编写,可以实现对二叉树的多种方式的创建、采用递归和非递归等两种方式先序、中序、后序进行遍历。
主功能模块
通过合理的界面设计,根据提示信息,使用者可以方便快捷地运行本程序来完成创建、遍历二叉树等操作。界面美观,人性化,程序智能,安全性高。
创建树模块
当进入程序运行界面后,根据提示输入需要建立的二叉树,共有三种方法来创建二叉树,即:1:广义表构造法、2:先序和中序构造法、3:中序和后序构造法。建立完二叉树后自动进入下一个功能模块。
遍历树模块
实现对该二叉树的先序递归遍历、先序非递归遍历、中序递归遍历、中序非递归遍历、后序递归遍历、后序非递归遍历、层序非递归遍历等方式的遍历操作,并输出各遍历序列。当对该二叉树进行层序非递归遍历时,直接输出该树的逻辑结构图,以便更直观地显示其层次关系。
概要设计
功能设计
创建二叉树
利用二叉树模板类,创建二叉树时产生类模板,调用类的构造函数来创建,修改二叉树的结构时,可以调用赋值语句直接把广义表转换成二叉树。相关类或函数如下:
class BinaryTree;
BinaryTree();
BinaryTreeT operator=(const string str);
先序递归遍历
若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。相关函数如下:
void PreOrderTraverse(const BinaryTreeNodeT* p) const;
中序递归遍历
若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。相关函数如下:
void InOrderTraverse(const BinaryTreeNodeT* p) const;
后序递归遍历
若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。相关函数如下:
void PostOrderTraverse(const BinaryTreeNodeT* p) const;
先序非递归遍历
若二叉树为空,则空操作;否则引入栈模拟递归工作栈,初始时栈为空。相关函数如下:
void PreOrderTraverse() const;
中序非递归遍历
若二叉树为空,则空操作;否则引入栈模拟递归工作栈,初始时栈为空。相关函数如下:
void InOrderTraverse() const;
后序非递归遍历
若二叉树为空,则空操作;否则引入栈和标记模拟递归工作栈,初始时栈为空。相关函数如下:
void PostOrderTraverse() const;
层序非递归遍历
按照树的层次从左到右访问树的结点,层序遍历用于保存结点的容器是队列。相关函数如下:
void LevelOrderTraverse() const;
算法流程图
图2-1 创建而二叉树
图2-2 前序递归遍历
图2-3 中序递归遍历
图2-4 后序递归遍历
图2-5 先序非递归遍历
图2-6 中序非递归遍历
图
文档评论(0)