AVL树及其计算

AVL树

AVL树(平衡二叉树)是有序表的一种实现,学习AVL树的前置知识是掌握二叉搜索树。关于二叉搜索树的知识可以参考这篇文章

使用静态数组存储AVL树

构建AVL树

在构建AVL树的时候,注意时刻维持AVL树的性质不变。在不断插入节点的时候,可能需要对AVL树进行调整,只需要调整最小不平衡子树。

四种违规类型及其调整方式

首先是LL型违规,对应的调整方式为对最小不平衡子树的根节点(u),进行右旋调整。u的左子节点(v),成为了新的头节点,接在u的父节点上。如果

对于RR型违规,需要对最小不平衡子树的根节点进行左旋调整。

对于LR型违规,需要先对最小不平衡子树的根节点的左子节点进行左旋,再对根节点右旋。

对于RL型违规,需要先对最小不平衡子树的根节点的右子节点进行右旋,再对根节点左旋。

计算平均查找长度

对于计算查找成功的平均查找长度,需要先计算树中所有节点的查找长度的总和,再除以节点数得到。

对于计算查找失败的平均查找长度,需要先计算叶子节点的左右子节点(实际上不存在)的查找长度的总和,再除以叶子节点的左右子节点个数得到。

和二叉搜索树比较

AVL树是二叉搜索树(BST)的一种特殊形式,它通过引入平衡因子旋转操作 ,解决了普通BST在极端情况下退化为链表的问题。简单来说,AVL树是一种自平衡的二叉搜索树

特性 二叉搜索树 (BST) AVL树 (平衡二叉搜索树)
核心定义 左子树所有节点 < 根节点 < 右子树所有节点 在BST的基础上,左右子树高度差 ≤ 1
平衡性 不保证平衡,可能退化为链表 严格平衡,通过旋转保持高度差在1以内
查找效率 平均 O(log n),最坏 O(n) (退化为链表时) 最坏 O(log n),性能稳定
插入/删除 简单插入,无需调整 插入/删除后需检查平衡并旋转
适用场景 数据随机分布,或对查询速度要求不高 频繁查找,要求稳定性能的场景
相关推荐
凤凰院凶涛QAQ15 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
郝学胜-神的一滴16 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
Irissgwe16 小时前
算法滑动窗口
数据结构·算法
LuminousCPP19 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
兰令水19 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
LuminousCPP1 天前
单链表专题(应用篇):三道经典题吃透删除、反转与快慢指针
c语言·数据结构·笔记
:-)1 天前
算法-希尔排序
数据结构·算法·排序算法
罗超驿2 天前
2.算法效率的核心密码:时间复杂度和空间复杂度详解
java·数据结构·算法
:-)2 天前
算法-堆排序
数据结构·算法·排序算法
j7~2 天前
【数据结构初阶】顺序表增删查改代码实现--详解
数据结构·顺序表·动态顺序表·静态顺序表