数据结构程序报告平衡二叉树的操作Word文件下载.docx
- 文档编号:13947576
- 上传时间:2022-10-15
- 格式:DOCX
- 页数:19
- 大小:259.11KB
数据结构程序报告平衡二叉树的操作Word文件下载.docx
《数据结构程序报告平衡二叉树的操作Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构程序报告平衡二叉树的操作Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
voidL_Rotate(BSTree&
voidLeftBalance(BSTree&
//对以指针T所指结点为根的二叉树作左平衡旋转处理
voidRightBalance(BSTree&
//对以指针T所指结点为根的二叉树作右平衡旋转处理
boolInsertAVL(BSTree&
T,inte,bool&
taller);
//插入结点e
boolSearchBST(BSTree&
T,intkey);
//查找元素key是否在树T中
voidLeftBalance_div(BSTree&
p,int&
shorter);
//删除结点时左平衡旋转处理
voidRightBalance_div(BSTree&
//删除结点时右平衡旋转处理
voidDelete(BSTreeq,BSTree&
r,int&
//删除结点
intDeleteAVL(BSTree&
p,intx,int&
//平衡二叉树的删除操作
voidPrintBST(BSTreeT,intm);
//按树状打印输出二叉树的元素
2.主程序的流程
请输入操作的选项编号(1-5)
1---创建平衡二叉树
2---查找
3---插入
4---删除
5---结束
3.各模块之间的层次调用
3.详细设计
1.以平衡二叉树的插入和平衡化为例:
taller)
{
//若存在平衡的二叉排序树T中不存在和e有相同关键字的节点,则插入一个数据元素为e
//的新结点,并返回1,否者返回0。
若因插入而使二叉排序树失去平衡,则作平衡旋转理,
//布尔变量taller反映T长高与否。
if(!
T)//插入新结点,树“长高”,置taller为true
{
T=(BSTree)malloc(sizeof(BSTNode));
T->
data=e;
lchild=T->
rchild=NULL;
bf=EH;
taller=true;
}
else
if(EQ(e,T->
data))//树中已存在和有相同关键字的结点
{taller=false;
printf("
已存在相同关键字的结点\n"
);
return0;
}//则不再插入
if(LT(e,T->
data))//应继续在*T的左子树中进行搜索
InsertAVL(T->
lchild,e,taller))return0;
//未插入
if(taller)//已插入到*T的左子树中且左子树“长高”
switch(T->
bf)//检查*T的平衡度
caseLH:
//原本左子树比右子树高,需要作左平衡处理
LeftBalance(T);
taller=false;
break;
caseEH:
//原本左子树、右子等高,现因左子树增高而使树增高
bf=LH;
caseRH:
//原本右子树比左子树高,现左、右子树等高
}//switch(T->
bf)
}//if
else//应继续在*T的右子树中进行搜索
rchild,e,taller))return0;
if(taller)//已插入到*T的右子树中且右子树“长高”
{
//原本左子树比右子树高,现左、右子树等高
//原本左子树、右子等高,现因右子树增高而使树增高
bf=RH;
//原本右子树比左子树高,需要作右平衡处理
RightBalance(T);
}//else
return1;
}//InsertAVL
2.说明:
执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型量
赋值时,会将缓冲区当成数据存入变量中,所以要在某些输入语句后面加getchar
函数。
4.调试分析
1.遇到的问题:
(1)对平衡二叉树的删除的算法设计程序存在很大问题。
删除节点后需要对新的排序树平衡化,改变节点的信息,使之形成一棵新的平衡二叉树。
(2)主函数中的实参和子函数中的实参相等,造成调用该子函数时,虽然没有错误,但其功能不能正确的实现。
改变该变量后程序成功实现各种功能。
(3)一些逻辑逻辑运算符书写不正确,造成实现的功能不正确或程序死循环。
……
2.收获:
(1)对平衡二叉树的构造、插入和删除的算法思想有了更清楚的认识,能够对平衡二叉树进行创建、调平、插入、删除等操作,实现动态的输入数据,实时的输出该树结构.
(2)对多个程序的调用
5.用户使用说明
1.了解程序清单上给出的功能,并根据提示依次进行操作。
2.创建二叉树,输入的数据元素为整数,当输入-123时,停止创建。
并显示平衡二叉树的中序凹入树形图。
3.查找(输入你要查找的元素)。
4.插入(输入要插入的数据元素,并输出)
5.删除(删除指定的元素,并输出)
6.结束
说明:
其中每一个功能实现后都会提示是否继续:
选择y继续,否则,终止。
6.测试结果
1.创建平衡二叉树:
(中序凹入输出)
2.查找
查找成功或失败时:
3.插入
4.删除,结束
7.附录
源代码:
#include<
stdio.h>
stdlib.h>
#defineLH+1
#defineEH0
#defineRH-1
#defineNULL0
voidR_Rotate(BSTree&
voidPrintBST(BSTreeT,intdepth);
voidmain()
BSTreeT;
intsear,cmd,depth;
charch;
intshorter=0;
booltaller=false;
T=(BSTree)malloc(sizeof(BSTNode));
T=NULL;
printf("
****************平衡二叉树的操作菜单****************\n"
1--创建\n"
2--查找\n"
3--插入\n"
printf("
4--删除\n"
5--退出\n"
****************************************************\n"
do
\n请选择操作的编号:
"
scanf("
%d"
&
cmd);
getchar();
switch(cmd)
case1:
CreatBST(T);
break;
case2:
printf("
请输入您要查找的关键字:
scanf("
sear);
getchar();
if(SearchBST(T,sear))printf("
关键字%d存在,查找成功!
\n"
sear);
elseprintf("
查找失败!
break;
case3:
请输入您要插入的关键字:
getchar;
InsertAVL(T,sear,taller);
depth=0;
PrintBST(T,depth);
case4:
depth=0;
请输入你要删除的关键字:
"
scanf("
getchar();
DeleteAVL(T,sear,shorter);
case5:
结束!
default:
输入错误!
}
if(cmd==5)
\n继续吗?
y/n:
%s"
ch);
}while(ch=='
y'
}
T)
intdepth;
inte;
T=NULL;
\n请输入关键字(以-123结束建立平衡二叉树):
scanf("
e);
while(e!
=-123)
Inse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 程序 报告 平衡 二叉 操作
![提示](https://static.bdocx.com/images/bang_tan.gif)