- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
武 汉 工 程 大 学
计算机科学与工程学院
《数据结构》实验报告[2]
专业班级 实验地点 学生学号 指导教师 学生姓名 实验时间 实验项目 树性结构的综合使用 实验类别 操作性() 验证性( ) 设计性( ) 综合性( √) 其它( ) 实验目的及要求 1.实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。
2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。 成 绩 评 定 表 类 别 评 分 标 准 分值 得分 合 计 上机表现 积极出勤、遵守纪律认真完成设计任务 30分 报告质量 操作规范、功能正确
填写完整、体现收获 70分 说明:
评阅教师: 日 期: 20 年 月 日 实 验 内 容 一.实验内容
1.实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。
2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。
二.程序的设计思想
1实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。
先构造二叉树,根据先序遍历的思想,输入根后,再输入左子树,直至左子树为空则输入上一层右字树。
(1)二叉树的非递归遍历是用显示栈来存储二叉树的结点指针,先序遍历时,按二叉树前序遍历的顺序访问结点,并将结点的指针入栈,直到栈顶指针指向结点的左指针域为空时取出栈顶指针并删除栈顶指针,访问刚取出的指针指向的结点的右指针指向的结点并将其指针入栈,如此反复执行则为非递归操作。
(2)二叉树的递归遍历:若二叉树为空,则空操作
先序遍历:
(a
(b
(c
(a
(b
(c)中序遍历右子树
后序遍历:
(a
(b
(c
2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。
(1)求二叉树的叶子结点个数:先分别求得左右子树中个叶子结点的个数,再计算出两者之和即为二叉树的叶子结点数。
(2)二叉树的结点个数之和:先分别求得左子树右子树中结点之和,再计算两者之和即为所求。
(3)二叉树的高度:首先判断二叉树是否为空,若为空则此二叉树高度为0,。否则,就先分别求出左右子树的深度进行比较,取较大的树加一即为所求。
(4)二叉树的度为2的结点个数:计算有左右孩子的结点个数,即为度为2的结点个 实 验 内 容 数。
三.编程过程中遇到的问题及解决办法
(1)后续遍历的非递归函数涉及到回溯的方法,开始设计的方案想的太过于简单,所以形成了死循环,总是在最后的节点处不停地循环,后改成回溯后,该问题得到解决。
(2)计算二叉树中度为2的结点个数中,返回循环的时候不论根结点有没有左右子树,但个人设计时,根总是会将自己默认为有左右子树,自行增加1.后在同学帮助下才看到自己的这个失误。
四.程序的闪光点(自我评价)
1.程序模块化,各个函数分开描述,方便观察
2.关键处有注释
3.建立二叉树时,用先序提示输入,比较人性化。
五.程序源代码(以文件为单位提供)
#includeiostream.h
#includemalloc.h
#define Maxsize 100
typedef struct TREE{
struct TREE *lTree;
struct TREE *rTree;
char data;
}Tree;
void InitTree(Tree*);//初始化树
void CreatTree(Tree*);//创建二叉树
void PreTraverse(Tree*);//先序遍历递归
void PreOrderTraverse(Tree*);//先序遍历非递归
void InTraverse(Tree *tree);//中序遍历递归
void InOrderTraverse(Tree *tree);//中序遍历非递归
void PostTraverse(Tree *tree);//后序遍历递归
void LastOrderTraverse(Tree *tree);//后序遍历非递归
int DepthTree(Tree *tree);//计算树的深度
您可能关注的文档
最近下载
- 【交通运输类】浙江省汽车维修行业工时定额和收费标准浙江省交通厅浙江省物价局精编.pdf VIP
- TD-JZ2006-6001西南设计院预埋件图集.pdf
- 01J925 1 压型板屋面.PDF VIP
- 视听语言 镜头运动.pptx VIP
- 广州市白云区广大附中实验中学2022-2023学年上学期期中调研八年级物理问卷.docx VIP
- JB∕T 5317-2016 环链电动葫芦.pdf VIP
- 广东省广州市白云区广大附中实验中学2022-2023学年八年级上学期期末线上考试语文试卷.doc VIP
- 风电机组专项隐患排查治理记录表.doc VIP
- 风电机组专项隐患排查治理记录表自查.pdf VIP
- 工厂生产管理制度(3篇).docx VIP
文档评论(0)