实验报告平衡二叉树Word文档格式.docx
- 文档编号:13818216
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:23
- 大小:105.73KB
实验报告平衡二叉树Word文档格式.docx
《实验报告平衡二叉树Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验报告平衡二叉树Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
(5)(Q)uit//结束。
4、测试数据:
平衡二叉树为:
图1插入关键字10之前的平衡二叉树
插入关键字:
10;
调整后:
图2插入关键字10之后的平衡二叉树
删除关键字:
14;
图3删除关键字14后的平衡二叉树
查找关键字:
11;
输出:
Thedataishere!
图3查找关键字11后的平衡二叉树
二、概要设计
本次实验目的是为了实现动态查找表的三种基本功能:
动态查找表可有不同的表示方法,在此次实验中主要是以平衡二叉树的结构来表示实现的,所以需要两个抽象数据类型:
动态查找表和二叉树。
1、动态查找表的抽象数据类型定义为:
ADTDynamicSearchTable
{数据对象D:
D是具有相同特性的数据元素的集合。
各个数据元素均含有类型相同,可唯一标识数据元素的关键字。
数据关系R:
数据元素同属于一个集合。
基本操作P:
InitDSTable(&
ST);
操作结果:
构造一个空的动态查找表DT。
DestroyDSTable(&
DT);
初始条件:
动态查找表DT存在。
销毁动态查找表DT。
SearchDSTable(DT,key);
动态查找表DT存在,key为和关键字类型相同的给丁值。
若DT中存在其关键字等于key的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。
InsertDSTable(&
DT,e);
动态查找表DT存在,e为待插入的数据元素。
若DT中不存在其关键字等于e,key的数据元素,则插入e到DT;
DeleteDSTable(&
DT,key);
动态查找表DT存在,key为和关键字类型相同的给定值。
若DT中存在其关键字等于key的数据元素,则删除之。
}ADTDynamicSearchTable
2、二叉树抽象数据类型的定义为:
ADTBinaryTree
若D=¢,则R=¢,称BinaryTree为空的二叉树;
若D≠¢,则R={H},H是如下二元关系:
(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;
(2)若D—{root}≠¢,则存在D—{root}={D1,Dr},且D1∩Dr=¢;
(3)若D1≠¢,则D1中存在唯一的元素x1,<
root,x1>
∈H,且存在D1上的关系H1∈H;
若Dr≠¢,则Dr中存在唯一的元素xr,<
root,xr>
∈H,且存在Dr上的关系Hr∈H;
H={<
,<
,H1,Hr};
(4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是符合本定义的二叉树,称为根的右子树。
基本操作P:
InitBiTree(&
T);
操作结果:
构造空的二叉树T;
DestroyBiTree(&
初始条件:
二叉树T存在。
销毁二叉树T。
CreateBiTree(&
T,definition);
definition给出T的定义。
按definition构造二叉树T。
BiTreeEmpty(T);
若T为空二叉树,则返回TRUE,否则FALSE。
LeftChild(T,e);
二叉树T存在,e是T中某个结点。
返回e的左孩子。
若e无左孩子,则返回“空”。
RightChild(T,e);
返回e的右孩子。
若e无右孩子,则返回“空”。
InsertAVL(T,e,taller);
二叉树T存在,e为要插入的结点,taller反映T长高与否。
若在平衡二叉树中不存在和e相同关键字的结点,则插入一个数据元素为e的结点,并返回1,否则返回0。
若因插入而使二叉排序树失去平衡,则旋转处理。
RightProcess(T);
对以T为根的二叉树做右旋转处理,处理之后T指向新的树根结点。
LeftProcess(T);
对以T为根的二叉树做左旋转处理,处理之后T指向新的树根结点
}
3、本程序包括四个模块:
(1)主程序模块:
voidmain()
{for(;
;
)
{switch()
{
接受命令;
处理命令;
}
(2)二叉树单元模块:
实现二叉树的抽象数据类型。
(3)动态查找表单元模块:
实现动态查找表的抽象数据类型。
(4)结点结构模块:
实现平衡二叉树的查找、插入和删除操作。
各模块之间的关系:
图4各模块之间的关系
三、详细设计
1、元素类型、结点类型和指针类型;
typedefintInfoType
typedefstructnode/*记录类型*/
{
InfoTypedata;
/*其他数据域*/
Structnodelchild,rchild;
/*左右孩子指针*/
}BSTNode,*BSTree;
statusMakeNode(BSTNode&
p,ElemTypee)
{/*分配由p指向的数据元素为e、后继为"
空"
的结点,并返回TRUE,扩若分配失败,则返回FALSE*/
p=(BSTNode*)malloc(sizeof(BSTNode);
if(!
p)returnFALSE;
p->
data=e;
next=NULL;
returnTRUE;
voidFreeNode(BSTNode&
p)
{/*释放p所指结点*/
2、根据动态查找表的基本操作特点:
表结构本身是在查找过程中动态产生的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。
在此次试验中主要是利用平衡二叉树来实现动态查找表。
平衡二叉排序树定义为:
typedefintKeyType;
/*元素类型*/
typedefstructnode
KeyTypekey;
/*关键字项*/
intbf;
/*平衡因子*/
/*其他数据域*/
}BSTNode,*BSTree;
inttaller;
/*taller=0,平衡二叉数没有长高不需要调整;
taller=1,二叉数长高,需要验证是否还是平衡二叉数,如果不是,则需要进行调整.*/
平衡二叉树的基本操作定义如下:
intInsertAVL(BSTNode*b,KeyTypee,int*m);
//如果在平衡二叉排序树b中不存在e有相同关键字的结点,则插入一个数据元素为e的新结点,并返回1,否则返回0.如果因插入而使二叉排序树失去平衡,则做平衡处理,指针m反应b长高与否。
voidLeftProcess(BSTree*p,int*m);
//在插入结点时对以指针p所指结点为根的二叉树做左平衡旋转处理。
voidRightProcess(BSTree*p,int*m);
//在插入结点时对以指针p所指结点为根的二叉树做右平衡旋转处理。
intDeleteAVL(BSTree*p,KeyTypex,int*m);
/
//在以p为根的平衡二叉树中删除关键字为e的结点,如果因删除而使平衡二叉树失去平衡,则做平衡处理,指针m反应b树长高与否。
voidLeftProcess1(BSTree*p,int*m);
//由DeleteAVL()函数调用,在删除结点时进行左处理。
voidRightProcess1(BSTree*p,int*m);
//由DeleteAVL()函数调用,在删除结点时进行右处理。
voidDelete2(BSTreeq,BSTree*r,int*m);
//由DeleteAVL()调用,用于处理被删除结点都不为空的情况。
voidDrawTree(BSTreeb);
//对以b为根的平衡二叉树,以括号的形式显示出来。
voidOutputTree(BSTreeb,intfx,intfy,intprex,intprey);
//用图形把平衡二叉树显示出来。
3、本程序实现的是演示平衡二叉树的操作过程,包括插入和删除操作,以下是它们算法的设计。
(1)插入数据操作,如果数据存在,输出提示信息,如果不存在,则把此数据插入到入平衡二叉树中,并做相应的调整,使之还为平衡二叉树。
以下是对插入操作的设计。
intInsertAVL(BSTree*b,KeyTypee,int*m)
/*若在平衡的二叉排序树中b中不存在和e有相同关键字的结点,则插入一个数据元素为e的新结点,并返回0。
若因插入而使二叉排序树失去平衡,则做平衡旋转处理,taller的值反应长高与否。
*/
{if(*b==NULL)/*原为空树,插入新结点,树长高,置taller=*m=1*/
{(*b)=(BSTNode*)malloc(sizeof(BSTNode));
(*b)->
key=e;
lchild=(*b)->
rchild=NULL;
bf=0;
*m=1;
else
{if(e==(*b)->
key)/*树中已存在和e有相同关键字的结点,则不再进行插入*/
{*m=0;
/*置taller=*m=0,树没有长高,不须进行调整*/
printf("
\nThedataishere!
\n"
);
/*输出提示信息*/
return0;
if(e<
(*b)->
key)/*继续在*b的左子树中进行搜索*/
{if((InsertAVL(&
((*b)->
lchild),e,&
taller))==0)
/*存在和e有相同关键字的元素,则不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 平衡 二叉