二叉树的基本操作实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二叉树的基本操作实验报告
学号姓名实验日期 2012-12-26
实验室计算机软件技术实验指导教师设备编号 401
实验内容二叉树的基本操作
一实验题目
实现二叉树的基本操作的代码实现
二实验目的
1、掌握二叉树的基本特性
2、掌握二叉树的先序、中序、后序的递归遍历算法
3、通过求二叉树的深度、度为2的结点数和叶子结点数等算法三实习要求
(1)认真阅读书上给出的算法
(2)编写程序并独立调试
四、给出二叉树的抽象数据类型
ADT BinaryTree{
//数据对象D:D是具有相同特性的数据元素的集合。
//数据关系R:
// 若D=Φ,则R=Φ,称BinaryTree为空二叉树;
// 若D?Φ,则R={H},H是如下二元关系;
// (1)在D中存在惟一的称为根的数据元素root,它在关系H下无前驱; // (2)若D-{root}?Φ,则存在D-{root}={D1,Dr},且D1?Dr =Φ; // (3)若D1?Φ,则D1中存在惟一的元素x1,
Hr ?H;H={
// (4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树;(Dr,{Hr})是一棵符合本定义的二叉树,称为根的右子树。
//基本操作:
CreateBiTree( &T, definition ) // 初始条件:definition给出二叉树T的定义。
// 操作结果:按definiton构造二叉树T。
BiTreeDepth( T )
// 初始条件:二叉树T存在。
// 操作结果:返回T的深度。
PreOrderTraverse( T, visit() ) // 初始条件:二叉树T存在,Visit是对结点操作的应用函数。 // 操作结果:先序遍历T,对每个结点调用函数Visit一次且仅一次。一旦visit()失败,则操
作失败。
InOrderTraverse( T, visit() ) // 初始条件:二叉树T存在,Visit是对结点操作的应用函数。 // 操作结果:中序遍历T,对每个结点调用函数Visit一次且仅一次。一旦visit()失败,则操
作失败。
PostOrderTraverse( T, visit() ) // 初始条件:二叉树T存在,Visit是对结点操作的应用函数。 // 操作结果:后序遍历T,对每个结点调用函数Visit一次且仅一次。一旦visit()失败,则操
作失败。
LeafNodes(p)
// 初始条件:二叉树T存在。
// 操作结果:返回T的叶子结点数。
BothNodes(p)
//初始条件:二叉树T存在。
// 操作结果:返回T的度为2的结点数。
五、详细设计
1、给出本数据的存储结构定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define NULL 0
#define OVERFLOW -2
2、实现二叉树的抽象数据类型如下:
typedef int Status;
typedef char TElemType; 定义二叉树的数据元素类型为chr
3、存储实现的抽象数据类型如下:
typedef struct BiTNode0120
{
TElemType data;
struct BiTNode0120 *lchild; // 左孩子指针
struct BiTNode0120 *rchild;// 右孩子指针
}BiTNode0120, *BiTree;
4、运算的函数声明:
Status CreateBiTree0120 (BiTree T, definition )//构建二叉树Status PreOrder0120 (BiTree p)//先序遍历
Status InOrder0120 (BiTree p)//中序遍历
Status PostOrder0120 (BiTree p)//后序遍历
Status BTNodeDepth0120 (BiTree p)//求二叉树的深度
Status LeafNodes0120 (BiTree p,int *i)//求二叉树叶子结点的个数
void getDataFromFile0120(char fileName[],BiTree &root);
Status BothNodes0120 (BiTree p,int *i)//求度为2的结点数
5、给出操作实现的伪码
Status createBiTree0120 (BiTree &root,char in[],int begin1,int
end1,char post[],int
begin2,int end2)
{ //根据给定的中序序列in,后序序列post,构造二叉树root
//其中: begin1,end1分别为叉树的中序序列在in[]中的开始位置(序号,数组下标+1)、结束位置;
//其中: begin2,end2分别为叉树的后序序列在post[]中的开始位置(序号,数组下标+1)、结束位置;
char r;
int i;
int m1; //中序序列中,左子树根位置
int m2; //后序序列中,左子树最后一个结点位置
if(begin1-end1!=begin2-end2) return ERROR;
if(end1-begin1>=0)
{
root=(BiTree)malloc(sizeof(BiTNode));
r=post[end2];