广工数据结构实验报告记录平衡二叉树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广工数据结构实验报告记录平衡二叉树

————————————————————————————————作者:————————————————————————————————日期:

实验报告

课程名称数据结构实验学院计算机学院专业班级计科9班

学号

学生姓名

指导教师苏庆

2015年 7 月6 日

1.题目:平衡二叉树

ADT BBSTree{

数据对象:D={ ai | ai∈ElemSet, i=1,2,...,n, n≥0 }

数据关系:R1={ |ai-1, ai∈D, i=2,...,n }

基本操作:

BBSTree MakeBBSTree( )

操作结果:创建好一棵树

返回:将创建好的树返回

Status InsertAVL(BBSTree &T, RcdType e, Status &taller)

初始条件:树T已存在,e存在,taller为真

操作结果:将e插入到T中

返回:成功TRUE,失败FALSE

Status DeleteAVL(BBSTree &t, RcdType e, Status &shorter) 初始条件:树T已存在,e存在,shorter为真

操作结果:将e从T中删除

返回:成功TRUE,失败FALSE

BBSTree SearchAVL(BBSTree T, RcdType e)

初始条件:树T已存在,e存在

操作结果:从T中找到e

返回:以e为根节点的树

void L_Rotate(BBSTree &p)

初始条件:树p存在

操作结果:对p左旋操作

void R_Rotate(BBSTree &p)

初始条件:树p存在

操作结果:对p右旋操作

void LeftBalance(BBSTree &T)

初始条件:树T存在

操作结果:对T左平衡操作

void RightBalance(BBSTree &T)

初始条件:树T存在

操作结果:对T右平衡操作

void ExchangeSubTree(BBSTree &T)

初始条件:树T存在

操作结果:对T所有左右孩子交换

int BBSTreeDepth(BBSTree T)

初始条件:树T已存在

操作结果:求树T的深度

返回:树的深度

BBSTree Combine2Tree(BBSTree T1, BBSTree T2)

初始条件:树T1和T2已存在

操作结果:将T1和T2合并

返回:合并后的树

Status SplitBBSTree(BBSTree Tt1, BBSTree &Tt2,

BBSTree &Tt3, int x)

初始条件:树Tt1,Tt2,Tt3已存在,x存在

操作结果:将Tt1分裂成Tt2和Tt3

返回:以e为根节点的树

Status PreOrder_RecTraverse(BBSTree T)

初始条件:树T已存在

操作结果:对树T进行递归先序遍历输出

返回:成功TRUE 失败FALSE

Status InOrder_RecTraverse(BBSTree T)

初始条件:树T已存在

操作结果:对树T进行递归中序遍历输出

返回:成功TRUE 失败FALSE

Status LastOrder_RecTraverse(BBSTree T)

初始条件:树T已存在

操作结果:对树T进行递归后序遍历输出

返回:成功TRUE 失败FALSE

void PreOrderTravese_I(BBSTree T)

初始条件:树T已存在

操作结果:对树T进行非递归先序遍历输出

void InOrderTraverse_I(BBSTree T)

初始条件:树T已存在

操作结果:对树T进行非递归中序遍历输出

void LastOrderTravese_I(BBSTree T)

初始条件:树T已存在

操作结果:对树T进行非递归后序遍历输出

void LevelOrederTraverse_Print(BBSTree T)

初始条件:树T已存在

操作结果:对树T进行非递归层次遍历输出

void BraNotationPrint(BBSTree T)

初始条件:树T已存在

操作结果:对树T用括号表示法输出

}ADT BBSTree

2.存储结构定义

#include

#include

#define OVERFLOW -1

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define LH +1 //左高

#define EH 0 //等高

#define RH -1 //右高

typedef int RcdType;

typedef int Status;

/*平衡二叉树结构体*/

typedef struct BBSTNode{

RcdType data;

int bf;

BBSTNode *lchild, *rchild;

}BBSTNode,*BBSTree;

3.算法设计

/*求平衡二叉树的深度*/

int BBSTreeDepth(BBSTree T){

int depthLeft, depthRight;

if(NULL==T) return 0;

else{

depthLeft = BBSTreeDepth(T->lchild);

depthRight = BBSTreeDepth(T->rchild);

return 1+(depthLeft > depthRight ? depthLeft : depthRight);

}

}

/*交换二叉树所有结点的左右子树*/

void ExchangeSubTree(BBSTree &T){

BBSTree temp;

if(NULL!=T){

ExchangeSubTree(T->lchild); //使用递归交换左子树

ExchangeSubTree(T->rchild); //使用递归交换右子树

if((T->lchild!=NULL)||(T->rchild!=NULL)){ //如果T的子树有一个不

为空,则交换左右子树

temp = T->lchild;

T->lchild = T->rchild;

T->rchild = temp;

相关文档
最新文档