下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ALV树的处理
1.概述
AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以
它也被称为高度平衡树。AVL树得名于它的发明者GM.Adelson-Velsky和E.M.Landis。AVL树种查
找、插入和删除在平均和最坏情况下都是。(logn),增加和删除可能需要通过一次或多次树旋转来重
新平衡这个树。本文介绍了AVL树的设计思想和基本操作。
2.基本术语
有四种种情况可能导致二叉查找树不平衡,分别为:
(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子
由1变为2
(2)RR:插入•个新节点到根节点的右子树(Right)的右子树(Right),导致根节点的平衡因
子由-1变为-2
(3)LR:插入一个新节点到根节点的左子树(Left)的右子树(Right),导致根节点的平衡因子
由1变为2
(4)RL:插入一个新节点到根节点的右子树(Right)的左子树(Left),导致根节点的平衡因子
由-1变为-2
针对四种种情况可能导致的不平衡,可以通过旋转使之变平衡。有两种基本的旋转:
(1)左旋转:将根节点旋转到(根节点的)右孩子的左孩子位置
(2)右旋转:将根节点旋转到(根节点的)左孩子的右孩子位置
3.AVL树的旋转操作
AVL树的基本操作是旋转,有四种旋转方式,分别为:左旋转,右旋转,左右旋转(先左后右),
右左旋转(先右后左),实际上,这四种旋转操作两两对称,因而也可以说成两类旋转操作。
基本的数据结构:
1typedefstructNode*Tree;
2typedefstructNode*Node_t;
3typedefTypeint;
4
5structNode{
6Node_tleft;
7Node_tright;
8intheight;
9Typedata;
10};
11intHeight(Node_tnode){
12returnnode->height;
13)
3.1LL
LL情况需要右旋解决,如下图所示:
代码为:
1Node_tRightRotate(Node_ta){
2b=a->left;
3a->left=b->right;
4b->right=a;
5a->height=Max(Height(a->left),Height(a->right));
6b->height=Max(Height(b->left),Height(b->right));
7returnb;
8
3.2RR
RR情况需要左旋解决,如下图所示:
代码为:
1Node_tLeftRotate(Node_ta){
2b=a->right;
3a->right=b->left;
4b->left=a;
5a->height=Max(Height(a->left),Height(a->right));
6b->height=Max(Height(b->left),Height(b->right));
7returnb;
8}
3.3LR
LR情况需要左右(先B左旋转,后A右旋转)旋解决,如下图所示:
代码为:
1Node_tLeftRightRotate(Node_ta){
2a->left=LeftRotate(a->left);
3returnRightRotate(a);
4
3.4RL
RL情况需要右左旋解决(先B右旋转,后A左旋转),如下图所示:
代码为:
1Node_tRightLeftRotate(Node_ta){
2a->right=RightRotate(a->right);
3returnLeftRotate(a);
4)
4.AVL数的插入和删除操作
(1)插入操作:实际上就是在不同情况下采用不同的旋转方式调整整棵树,具体代码如下:
1Node_tInsert(Typex,Treet){
2if(t==NULL){
3t=NewNode(x);
4}elseif(x<t->data){
5t->left=Insert(t->left);
6if(Height(t->left)-Height(t->right)==2){
7if(x<t->left->data){
8t=RightRotate(t);
9}else{
10t=LeftRightRotate(t);
11)
12)
13}else{
14t->right=Insert(t->right);
15if(Height(t->right)-Height(t->left)==2){
16if(x>t->right->data){
17t=LeftRotate(t);
18}else{
19t=RightLeftRotate(t);
20}
21}
22)
23t->height=Max(Height(t->left),Height(t->right))+1;
24returnt;
25)
(2)删除操作:首先定位要删除的节点,然后用该节点的右孩子的最左孩子替换该节点,并重新调
整以该节点为根的子树为AVL树,具体调整方法跟插入数据类似,代码如下:
1Node_tDelete(Typex,Treet){
2if(t==NULL)returnNULL;
3if(t->data==x){
4if(t->right==NULL){
5Node_ttemp=t;
6t=t->left;
7free(temp);
8}else{
9Node_thead=t->right;
10while(head->left){
11head=head->left;
12)
13t->data=head->data;//justcopydata
14t->right=Delete(t->data,t->right);
15t->height=Max(Height(t->left),Height(t->right))+1;
16)
17returnt;
18}elseif(t->data<x){
19Delete(x,t->right);
20if(t->right)Rotate(x,t->right);
21}else{
22Delete(x,t->left);
23if(t->left)Rotate(x,t->left);
24)
25if(t)Rotate(x,t);
26)
5.总结
AVL树是最早的自平衡二叉树,相比于后来出现的平衡二叉树(红黑树,treap,splay树)而
言,它现在应用较少,但研究AVL树对于了解后面出现的常用平衡二叉树具有重要意义。
6.参考资料
(1)数据结构(C语言版)严蔚敏,吴伟民著
(2)/wiki/AVL%E6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024家具工程安装承包协议书范本
- 2024工程承包简单的合同范本
- 2024年专业厨师岗位聘用协议模板版
- 江南大学《病理学与病理生理学》2021-2022学年第一学期期末试卷
- 基于2024年度AI算法的智能家居系统开发合同2篇
- 2024全新地砖采购合同下载
- 2024工厂临时用工协议协议版B版
- 教育基金会经济合同审批单
- 暨南大学《法语口译理论与实践Ⅱ》2021-2022学年第一学期期末试卷
- 济宁学院《健美操》2021-2022学年第一学期期末试卷
- 肿瘤科病人护理
- 2024年全民科学素质竞赛网络知识竞赛试题库及答案(共330题)
- 2024年财经考试-个股期权考试近5年真题集锦(频考类试题)带答案
- 新教科版小学1-6年级科学需做实验目录
- 2025届高考语文复习:时事新闻类作文破题+课件
- 2024秋期国家开放大学专科《高等数学基础》一平台在线形考(形考任务一至四)试题及答案
- 北京能源集团有限责任公司招聘笔试题库2024
- 专题21.1 二次根式的概念及性质(基础检测)(解析版)
- 牛津译林版英语2024七年级上册全册单元知识清单(默写版)
- GB/T 18457-2024制造医疗器械用不锈钢针管要求和试验方法
- 课件:《中华民族共同体概论》第五讲 大一统与中华民族共同体初步形成(秦汉时期)
评论
0/150
提交评论