- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
..
树和二叉树
一、实验目的
1.掌握二叉树的构造特征,以及各种存储构造的特点及适用围
2.掌握用指针类型描述、访问和处理二叉树的运算
二、实验要求
1.认真阅读和掌握本实验的程序
2.上机运行本程序
3.保存和打印出程序的运行结果,并结合程序进展分析
4.按照二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运
行结果
三、实验容
1.输入字符序列,建立二叉链表
2.按先序、中序和后序遍历二叉树〔递归算法〕
3.按某种形式输出整棵二叉树
4.求二叉树的高度
5.求二叉树的叶节点个数
6.交换二叉树的左右子树
7.借助队列实现二叉树的层次遍历
8.在主函数中设计一个简单的菜单,分别调试上述算法
为了实现对二叉树的有关操作,首先要在计算机中建立所需的二叉树。建立
二叉树有各种不同的方法。一种方法是利用二叉树的性质5来建立二叉树,
输入数据时要将节点的序号〔按满二叉树编号〕和数据同时给出:〔序号,
.v.
..
数据元素0〕。另一种方法是主教材中介绍的方法,这是一个递归方法,与
先序遍历有点相似。数据的组织是先序的顺序,但是另有特点,当某结点的
某孩子为空时以字符“*〞来充当,也要输入。假设当前数据不为“*〞,那么
申请一个结点存入当前数据。递归调用建立函数,建立当前结点的左右子树
四、解题思路
1、先序遍历:访问根结点,先序遍历左子树,先序遍历右子树
2、中序遍历:中序遍历左子树,访问根结点,中序遍历右子树
3、后序遍历:后序遍历左子树,后序遍历右子树,访问根结点
4、层次遍历算法:采用一个队列q,先将二叉树根结点入队列,然后退队列,
输出该结点;假设它有左子树,便将左子树根结点入队列;假设它有右子树,便
将右子树根结点入队列,直到队列空为止。因为队列的特点是先进后出,所以能
够到达按层次遍历二叉树的目的
五、程序清单
*includestdio.h
*includestdlib.h
*defineM100
typedefcharEtype;//定义二叉树结点值的类型为字符
型
typedefstructBiTNode//树结点构造
{
Etypedata;
structBiTNode*lch,*rch;
.v.
..
}BiTNode,*BiTree;
BiTreeque[M];
intfront=0,rear=0;
//函数原型声明
BiTNode*creat_bt1();
BiTNode*creat_bt2();
voidpreorder(BiTNode*p);
voidinorder(BiTNode*p);
voidpostorder(BiTNode*p);
voidenqueue(BiTree);
BiTreedelqueue();
voidlevorder(BiTree);
inttreedepth(BiTree);
voidprtbtree(BiTree,int);
voidexchange(BiTree);
intleafcount(BiTree);
voidpaintleaf(BiTree);
BiTNode
文档评论(0)