实验四树和二叉树及其应用(i)

实验四树和二叉树及其应用(i)

ID:35342937

大小:99.19 KB

页数:17页

时间:2019-03-23

实验四树和二叉树及其应用(i)_第1页
实验四树和二叉树及其应用(i)_第2页
实验四树和二叉树及其应用(i)_第3页
实验四树和二叉树及其应用(i)_第4页
实验四树和二叉树及其应用(i)_第5页
资源描述:

《实验四树和二叉树及其应用(i)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验项目树和二叉树及其应用(I)实验内容1.建立一•叉树的一叉链表存储结构,实现一叉树的前序、中序、后序递归遍历。二叉链表存储结构定义参见教材第127页。遍历算法参见教材第128-129页。2.编写递归算法,计算二叉树中叶子结点的数冃。(题集第42页6.42)3.编写递归算法,计算二叉树的深度。(题集第43页6.44)算法设计与程序实现:算法分析本次实验主函数采用顺序结构,主函数调用口己编写的头文件DataStructurc_BinaryTrce.h中的相关功能函数,完成实验要求。程序实现:1、二叉树的遍历:实验分别递归与

2、非递归的方法分别进行了先序、中序、后序和层序遍历。由于先序、中序、后序的递归遍历实现算法非常类似,所以以下的算法具体实现只对递归的先序遍历和层序遍历以及非递归的先序遍历、后序遍历和层序遍历作详细的分析说明。2、二叉树的基本操作:(1)求二叉树的深度;(2)求二叉树中叶了结点的个数;(3)先序交换二叉树;(4)查找以指定元素值为的根节点的根子树;(5)删除以指定元素值为的根节点的根子树;(6)判断二叉树是否为完全二叉树。以下分别以上的基木操作算法的具体实现作了详细的分析说明。1、二叉树的遍历>递归先序遍历:先序遍历二义树的原

3、则是当二义树不为空吋,先访问根结点,再次先序遍历左子树,最后先序遍历右子树,否则进行空操作(递归结束的条件)。按照以上先序遍历的原则,采取递归的方法很容易完成程序的具体实现。>递归层序遍历:层序遍历顾名思义从根结点出发从左到右逐层进行访问,由此可以通过控制层次数进而进行逐层遍历,当层次数不为零时,层次数递减递归遍历左、右子树,当层次数为零时(递归结束条件),访问该节点。遍历时可不比事先知道二叉树的深度(用于层次数递增边界控制),当当前层次数卞访问失败并返回,则当前层次数即为二叉树的深度。以上遍历中对每一层遍历都需从根结点出

4、发。>非递归先序遍历:在根指针不空的情况下,访问根结点,根指针域压栈,继续遍历左子树,循环上诉操作,当左子树指针为空(循环结朿条件,同时也是遍历右子树的条件),此时表明根指针己空,本左子树遍历完毕,然后退栈返回上一层,弹出的指针即此时根结点指针,继续遍历右了树未曾访问的结点。>非递归中序遍历:如同此法,中序与先序的不同是不能首先访问根结点,而是要先访问作孩子节点,耍使根结点能够被访问,就耍求此吋根结点的左孩子为空,这样根结点就能访问了,故访问操作是在根指针退栈后进行访问的。>非递归后序遍历:后序遍历与上面的先序、屮序遍历的

5、不同是也访问根结点的条件,即当根结点的右指针域为空或右孩了指针指向的节点已被访问过。由此算法是只要根指针不空吋,将根指针进栈,遍历左子树,当根指针为空(根节点的左孩子指针为空,该指针并没有进栈),取出栈顶指针,判断右孩子指针是否为空或已被访问过,如果上述条件成立则访问根结点,退栈并更新用于记录被访问的指针。>非递归层序遍历:根据二叉树的特性,使用队列这种数据结构,出队列一个节点指针,入队列两个节点指针,出队列指针结点的左右孩子指针即为入队列的指针(当访问成功才入队列),通过上述操作即可实现层序遍历。2、二叉树的基本操作>求

6、二义树的深度:求二义树的深度即求得左右子树的深度(左右子树深度最大值)加1,当然求左右了树的深度即求左右了树的左右了树的深度加1,由此递归下去,当子树为空时(递归结束条件),返回0,然后逐层向上其的二叉树深度。>求二叉树中叶子结点的个数:叶子结点即左右子树皆为空的节点。由此选择递归就很容易实现,从根结点开始进行遍历,判断当前结点的左右子树是否为空,不为空则继续访问卜•一个节点,为空则使叶子结点数加1,继续查找具他的节点。>先序交换二叉树:当根指针不空时,交换左右了树指针,然后交换左子树的左右孩子指针,如此递归操作,当当前的

7、根指针为空时,返回,交换右了树,如此就完成了二叉树的交换。>查找以指定元素值为的根节点的根子树:查找根遍历是相同的,只是把遍历的具体应川函数改为判断访问的节点的数据是否等于指定的数据,当找到则返回当前节点的根指针,若全部访问结束都述没栈顶则返冋失败。>删除以指定元索值为的根节点的根了树:查找指定元索的操作可通过上诉函数完成,至此只需要调用删除二叉树函数,至于删除二叉树的算法是当根指针不空时,依次释放左右子树的内存,然后释放根结点,当然释放左右子树时乂是先释放左右子树的左右子树的内存,如此进行递归操作,当根指针为空时,返回。

8、>判断二义树是否为完全二义树:判断二义树是否为完全二义树可以转化为判断二叉树的左右子树的深度是否相等,当相等时,二叉树即为完全二叉树,不等则不是完全二叉树。当然判断二叉树的深度是递归进行的,最终是判断二叉树的最底层的左右子树深度是否为零。核心程此程序中用到的自己编写的头文件以在下面给出,而头文件的说明则

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。