当前位置: 首页 > java >正文

AVL树的介绍与学习

目录

1.前言

2.AVL树

3.AVL树的插入

平衡因子的更新

更新停止的条件

旋转


1.前言

在学习了二叉搜索树,set和map之后,我们接下来趁热打铁,继续学习AVL树。

2.AVL树

1.AVL树具有二叉搜索树的性质,但是它的左右子树的高度差不超过1.是一颗高度平衡的二叉搜索树。

2.AVL树中我们引入了平衡因子概念,它的大小等于右子树的高度减去左子树的高度,在AVL树中,任何节点的平衡因子只能为1,-1,0,不是这个值说明这颗树就该调整了,他就像一个风向标一样,告诉我们这颗树是否平衡。

3.思考一下,为什么AVL树的高度差不可以只为0呢?试想一下,如果这颗树只有2个节点,它无论如何根节点的平衡因子都达不到0.

4.AVL树是高度平衡的二叉搜索树,它的搜索效率可以稳定控制在logN,对比二叉搜索树在特殊情况下的N方,有了质的提升。

3.AVL树的插入

1.他按照二叉搜索树的插入规则进行插入。

2.新增节点以后,只会影响祖先节点的平衡因子,所以需要更新祖先的平衡因子。

3.平衡因子未出问题,则插入结束,如果超出了1,-1,0的范围,就需要旋转来平衡树。

平衡因子的更新

1.平衡因子=左子树-右子树。

2.子树高度变化才会影响平衡因子。

3.插入右节点,平衡因子++,插入左节点,平衡因子--。

4.parent所在子树高度是否变化决定了是否向上更新。

更新停止的条件

1.更新后parent平衡因子为0,说明是由1或者-1变化而来。高度不变,平衡因子结束更新。雪中送炭。

2.更新后平衡因子为1或-1,说明原来是0,插入一个节点变为该值,影响了树的高度,需要向上更新。

3.更新后平衡因子为-2或2,更新前parent的平衡因子是1或-1,在高的一侧又再次插入节点变为2或-2,需要旋转处理。

4.不断更新,更新到根,根的平衡因子为0或-1停止了。

旋转

旋转的原则:1.保持搜索树的规则。2.让旋转的树从不满足变平衡,降低树的高度。

旋转由左旋,右旋,左右旋,右左旋。

由于内容比较多我们先介绍这么多,代码实现和旋转代码等下一篇博客再介绍。

http://www.xdnf.cn/news/2408.html

相关文章:

  • 技能点总结
  • X11安装备忘
  • arcpy列表函数的应用(4)
  • 超参数详解:从基础概念到优化策略的全面指南
  • 大学之大:索邦大学2025.4.27
  • Linux的权限
  • RISC-V MCU定时器架构与低功耗设计
  • Redis ssd是什么?Redis 内存空间优化的点都有哪些?embstr 和 row、intset、ziplist分别是什么?
  • 区块链:去中心化应用(DApp)开发全流程解析
  • 区块链基石解码:分布式账本的运行奥秘与技术架构
  • Java 深度与实战 · 每日一读 :高频面试真题解析 · ReentrantLock / CAS / AQS 篇
  • 智慧水库与AI深度融合的实现方案及典型应用场景
  • CREATION OF UNIVERSES FROM NOTHING
  • 练习普通话,声音细柔和
  • Spring Boot配置中YAML文档结构的理解
  • Nacos-SpringBoot 配置无法自动刷新问题排查
  • React自定义Hook之useMutilpleRef
  • CD33.【C++ Dev】初识模版
  • 深度学习4.1 多层感知机
  • 基础的贝叶斯神经网络(BNN)回归
  • 【C++详解】C++入门(二)引用、内联函数、nullptr宏
  • 23种设计模式-行为型模式之备忘录模式(Java版本)
  • MSO-Player:基于vlc的Unity直播流播放器,支持主流RTSP、RTMP、HTTP等常见格式
  • Python包的编译、构建与打包指南
  • 解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
  • AI医疗革命:DeepMind CEO展望十年内攻克疾病难题
  • 权力结构下的人才价值重构:从 “工具论” 到 “存在论” 的转变​
  • 《深入浅出Git:从版本控制原理到高效协作实战》​
  • AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类
  • 文章记单词 | 第49篇(六级)