广工数据结构实验报告记录平衡二叉树
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广工数据结构实验报告记录平衡二叉树
————————————————————————————————作者:————————————————————————————————日期:
实验报告
课程名称数据结构实验学院计算机学院专业班级计科9班
学号
学生姓名
指导教师苏庆
2015年 7 月6 日
1.题目:平衡二叉树
ADT BBSTree{
数据对象:D={ ai | ai∈ElemSet, i=1,2,...,n, n≥0 }
数据关系:R1={
基本操作:
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;