【黑皮书】 AVL树

目录

前言

[一 AVL树的介绍](#一 AVL树的介绍)

[二 单旋转](#二 单旋转)

[二 双旋转](#二 双旋转)

总结


前言

AVL树的学习


一 AVL树的介绍

AVL树是带有平衡条件的二叉查找树,这个平衡条件要持续保持,而且必须保证树的深度为O(log(N))最简单的想法就是要求左右子树具有相同的高度

一棵AVL树是其每一个节点的左子树和右子树的高度相差1的二叉查找树,空树的高度定义为-1,在对树进行操作的时候,时间复杂度往往都是log(N),但是这里复杂操作就是插入,为什么?因为你插入一个节点可能会破坏AVL树的特性,那么就要把性质恢复以后才认为这一步插入完成,事实上可以通过对树进行简单的修正来做到,这个就称为旋转

二 单旋转

什么时候需要单旋转?怎么进行单旋转?这都是我们要考虑的问题

1 什么时候需要单旋转?

类似于这种,我们不难发现这个左右子树都是相差为2的,x都是有问题的,因为它破坏了AVL树的平衡,这个时候我们需要用到旋转,但是是不是用到单旋转呢?我们可以发现出现问题的树都是在外面的,那么我们就要单旋转,因为出现问题的树在外侧,如果是在内测就不是单旋转了

2 怎么进行单旋转?

我们可以看我们出现问题的节点在哪里,这个时候我们就进行标记,然后进行对应的旋转,上面的图已经画的很详细啦,然后单旋转的出现情况的简图我已经滑倒情景1,2的旁边啦,我们可以看到这个是一条直线的,不是弯曲的

二 双旋转

1 什么时候需要进行双旋转

我们可以看到上面两个图,这个出现问题都是在内测的,那么就是需要进行双旋转的情况,旁边我也画了简图,用来表示出需要双旋转的情况,接下来我们就要去思考怎么进行双旋转了

2 怎么进行双旋转?

其实双旋转就是两次单旋转,这上面画了过程图,很容易理解

综上所述:单旋转的情况就是在外侧的时候,简化结构图是直线的时候就是进行单旋转
双旋转的情况就是在内测的时候,简化结构图是直线的时候就是进行双旋转
过程就是找到问题的根节点,然后进行根节点上面一个节点进行旋转,然后再把这个问题根节点的子树进行重新放置就可以处理掉这个情况


总结

今天主要讲解了AVL树的简介,还有插入的操作,操作分为插入到内测和插入到外侧的情况,下一讲将讲述具体的代码实现

相关推荐
夜晚中的人海41 分钟前
【C语言】初阶数据结构相关习题(二)
c语言·开发语言·数据结构
dddaidai1231 小时前
Redis数据结构
数据结构·redis·hash table
cdut_suye1 小时前
【Linux系统】从 C 语言文件操作到系统调用的核心原理
java·linux·数据结构·c++·人工智能·机器学习·云计算
灵典3362 小时前
数据结构入门-二叉树的层序遍历
数据结构·算法
轮到我狗叫了2 小时前
力扣.1471数组的k个最强值,力扣.1471数组的k个最强值力扣1576.替换所有的问号力扣1419.数青蛙编辑力扣300.最长递增子序列
java·数据结构·算法
敲代码的瓦龙2 小时前
STL?list!!!
c语言·开发语言·数据结构·c++·windows·list
程序员莫小特2 小时前
【GESP真题解析】第 20 集 GESP 二级 2025 年 3 月编程题 1:等差矩阵
c语言·数据结构·c++·算法·青少年编程·矩阵
ROCKY_8173 小时前
数据结构(九)——排序
数据结构·算法·排序算法
lkbhua莱克瓦243 小时前
用C语言实现了——一个基于顺序表的插入排序演示系统
c语言·开发语言·数据结构·程序人生·github·排序算法·交互
王RuaRua12 小时前
[数据结构]5. 栈-Stack
linux·数据结构·数据库·链表