- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
齐鲁工业大学实验报告 成绩
课程名称 数据结构 指导教师 单健芳 实验日期
院(系) 信息学院 专业班级 计科(嵌入)14-1 实验地点
学生姓名 高晨悦 学号 201403071007 同组人 无
实验项目名称 二叉树的递归算法
一、实验目的和要求
1.实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。
2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。
二、实验环境
微型计算机vc 6.0
三、实验内容
1.实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。
2.求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。
四、实验步骤
一.实验内容
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);//计算树的深度
int LeafsTree(Tree *tree);//计算叶子结点个数
int NodesTree(T
您可能关注的文档
最近下载
- 7.大华综合监控管理平台一体机dh-dss7016-d新.pdf VIP
- 第15课《中国工农红军长征与遵义会议》课件 统编版历史八年级上册.pptx VIP
- 微信小程序开发项目教程PPT完整全套教学课件.pptx VIP
- 第一单元第3课《旅程的灵感》教学设计 2025湘美版美术八年级上册.docx
- (高清版)B/T 12230-2023 通用阀门 不锈钢铸件技术条件.pdf VIP
- 屠宰企业宰前、屠宰过程及宰后检验流程要点和检验制度汇编-生猪.doc VIP
- ppt课件-第六章树和二叉树.ppt VIP
- 投标人承诺给予招标人的各种优惠条件.doc VIP
- RISC-V指令集手册说明书.pdf VIP
- 编程指南beetles应用程序开发说明.pdf VIP
原创力文档


文档评论(0)