- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
精品文档
精品文档
PAGE
PAGE18
精品文档
PAGE
课程设计报告
课程名称
数据结构课程设计
题 目
平衡二叉树操作
指导教师
设计起止日
2010-5-16
学
院
计算机学院
专
业
软件工程
学生姓名
班级/学号
成
绩
_________________
一.需求分析
1、建立平衡二叉树并进行创建、增加、删除、调平等操作。
2、设计一个实现平衡二叉树的程序,可进行创建、增加、删除、调平等操作,实现动态的输入数据,实时的输出该树结构。
3、测试数据:自选数据
二.概要设计
平衡二叉树是在构造二叉排序树的过程中,每当插入一个新结点
时,首先检查是否因插入新结点而破坏了二叉排序树的平衡性, 若是,
则找出其中的最小不平衡子树,在保持二叉排序树特性的前提下,调
整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之
成为新的平衡子树。具体步骤如下:
⑴每当插入一个新结点, 从该结点开始向上计算各结点的平衡因
子,即计算该结点的祖先结点的平衡因子,若该结点的祖先结点的平
衡因子的绝对值均不超过 1,则平衡二叉树没有失去平衡,继续插入
结点;
⑵若插入结点的某祖先结点的平衡因子的绝对值大于 1,则找出
其中最小不平衡子树的根结点;
⑶判断新插入的结点与最小不平衡子树的根结点的关系, 确定是
哪种类型的调整;
⑷如果是 LL型或RR型,只需应用扁担原理旋转一次, 在旋转过
程中,如果出现冲突,应用旋转优先原则调整冲突;如果是 LR型或
RL型,则需应用扁担原理旋转两次,第一次最小不平衡子树的根结点先不动,调整插入结点所在子树,第二次再调整最小不平衡子树,在旋转过程中,如果出现冲突,应用旋转优先原则调整冲突;
⑸计算调整后的平衡二叉树中各结点的平衡因子,检验是否因为旋转而破坏其他结点的平衡因子,以及调整后的平衡二叉树中是否存在平衡因子大于1的结点。
三.详细设计
树的内部变量
typedef struct BTNode
{
int data;
int bf;
struct
BTNode*lchild,*rchild;
//平衡因子
//左、右孩子
}BTNode,*BTree;
调平二叉树(左右调平方式大体雷同,之具体写出其中一种调平方式 )
if(插入元素与当前根元素相等 )
{
printf( "已存在相同关键字的结点 \n");
}
if(插入元素小于当前根元素 ))
{
if(插入新结点不成功 )
return 0;
if(插入成功)
switch(查看根的平衡因子 )
{
case+1:
进行左平衡处理 ;
{
检查*T的左子树的平衡度,并作相应平衡处理
{
case+1:
令根及其左孩子的平衡因子为 0;
做右平衡处理;
{
BTreelc;
lc指向的结点左子树根结点 ;
rc的右子树挂接为结点的左子树 ;
lc的右孩子为原结点 ;
原结点指向新的结点 lc;
}
break;
case-1:
rd指向*T的左孩子的右子树根
switch(查看右孩子平衡因子 )
{
case+1:
根的平衡因子为 -1;
根左孩子的平衡因子为 0;
break;
case0:
令根和根左孩子的平衡因子为 0;
break;
case-1:
根平衡因子为0;
根左孩子平衡因子为 1;
break;
}
根右孩子的平衡因子为 0;
对*T的左子树作左旋平衡处理;对*T作右旋平衡处理;
}
break;
case0:
令根的平衡因子为 +1;
break;
case-1:
令根的平衡因子为 -1;
break;
}
}
四.调试分析
在行插入新点并平由于利用的是普通的插入方法行LL、LR、RL、RR型的,使得在常没有更改内部量的,致出。
于在空情况下除点的考,是在后期的程中的。在没有更改代前,如果按此操作,程序就会崩。原因就是在除函数中然考到了空的情况,但是在出的函数中没有加入空的考而只是在建函数中加入了if?else?的判断。反复的,可以直接在出函数中加入判断而不必再其他位置判断,并且成功。
五.使用说明和测试结果
数据:
创建二叉树
增加二叉树
直接创建平衡二叉树
平衡二叉树加入新节点并调平
删除结点
六.心得体会
了解了建立树的方法;
学会了利用二分法建立树结构。、;
学习到了二叉树的调平方法;
学会了向一个已知树插入或删除结点的方法。
七.附录
源代码
#include
"stdafx.h"
#include
<stdio.h>
#include
<malloc.h>
#define
EQ(a,b)((a)==(b))
#define
LT(a,b)
((a)<(b))
#define
LQ(a,b)
((a)>(b))
#define
LH+1
//左高
#define
EH0
//等高
#de
您可能关注的文档
- 数据结构练习题含答案DOC.docx
- 数据结构讨论小课堂和习题解答解读.docx
- 数据结构试卷与答案.docx
- 数据结构试题总汇超全.docx
- 数据结构课堂笔记di.docx
- 数据结构课程实验报告.docx
- 数据结构课程设计一元稀疏多项式计算器.docx
- 数据结构课程设计参考答案a组课案.docx
- 数据结构课程设计实验报告计划要点计划.docx
- 数据结构课程设计迷宫问题设计说明书.docx
- 2024年武汉经济技术开发区(汉南区)湘口街道办事处综合业务岗招录1人《行政职业能力测验》模拟试卷(答案详解版).docx
- 2023年吉林辽源市卫健委招聘事业单位专业技术人员26人笔试《行政职业能力测验》模拟试卷(答案详解版).docx
- 2024年梨树县档案馆计算机管理职位公务员招录1人《行政职业能力测验》模拟试卷(答案详解版).docx
- 2024年普洱市景东县应急管理综合行政执法大队应急管理行政执法公务员招录1人《行政职业能力测验》模拟试卷(答案详解版).docx
- 2023年广西百色市平果生态环境局招聘2人笔试《行政职业能力测验》模拟试卷(答案详解版).docx
- 2024年建始县非税收入征收管理中心财务管理岗招录1人《行政职业能力测验》模拟试卷(答案详解版).docx
- 2024年株洲市审计局综合审计公务员招录1人《行政职业能力测验》模拟试卷(答案详解版).docx
- 2024年崇左市建设工程造价管理站工程造价管理职位公务员招录1人《行政职业能力测验》模拟试卷(答案详解版).docx
- 2023年江苏省苏州大学科研助理岗位招聘2人(刘庄教授课题组)笔试《行政职业能力测验》模拟试卷(答案详解版).docx
- 2024年抚州市崇仁县相山镇综合管理岗(二)公务员招录1人《行政职业能力测验》模拟试卷(答案详解版).docx
文档评论(0)