二叉树的基本操作实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,?H,且存在D1上的关系H1 ?H;若Dr?Φ,则Dr中存在惟一的元素xr,?H,且存在上的关系

Hr ?H;H={,,H1,Hr};

// (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];

相关文档
最新文档