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

Java基础系列-HashMap源码解析2-AVL树

文章目录

  • AVL树
    • 左旋
    • 右旋
    • 左旋右旋的4种情况
      • LL 型
      • RR 型
      • LR 型
      • RL 型
    • 实际插入时怎么判断是那种类型?
    • 插入时注意事项
    • 删除节点

AVL树

为避免BST树退化成链表的极端情况, AVL 树应运而生。
在这里插入图片描述
平衡因子取值(-1,0,1)
查找、插入、删除操作和BST保持一致,但是需要处理失衡(平衡因子不满足取值范围)的情况。
在这里插入图片描述

左旋

在这里插入图片描述
复杂情况:
在这里插入图片描述

右旋

在这里插入图片描述
复杂情况:
在这里插入图片描述

左旋右旋的4种情况

LL 型

插入节点3导致 14节点失衡。插入位置是14节点的左孩子的左子树上:
在这里插入图片描述

RR 型

插入节点 17 导致 5节点失衡。插入位置是5节点的右孩子的右子树上:
在这里插入图片描述

LR 型

插入节点6,导致节点9失衡,插入位置是在9节点左孩子的右子树上:
在这里插入图片描述

RL 型

插入节点8,导致节点5失衡,插入位置是在5节点右孩子的左子树上:
在这里插入图片描述

实际插入时怎么判断是那种类型?

根据插入位置是在哪个孩子的哪个子树上确定, 也可以通过平衡因子判断,用平衡因子判断更加常见:
在这里插入图片描述

插入时注意事项

如果同时多个祖先节点失衡,只需要调整距离插入节点最近的失衡节点,其他失衡节点会自然平衡.
在这里插入图片描述

删除节点

需要沿着祖先依次向上检查和调整
在这里插入图片描述

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

相关文章:

  • Java内存模型之JMM
  • NEUOJ网格路径
  • 本地服务器 Odoo 安装指南,并实现公网访问
  • MySQL基础增删改
  • LeetCode-47. 全排列 II
  • 杰理ac792开发板按键不起效果
  • ElasticSearch:高并发场景下如何保证读写一致性?
  • 搭建TypeScript单元测试环境
  • 高性能全闪存储在大模型训练与推理中的效率提升作用
  • HTTP 请求头的 key 不区分大小写。
  • 接口测试和功能测试详解
  • 【AI】Windows环境安装SPAR3D单图三维重建心得
  • 玩转Docker | 使用Docker部署Neko自托管浏览器
  • Chronos - 时间序列预测语言模型
  • SwiftUI 1.Text介绍和使用
  • Elasticsearch 报错 Limit of total fields [1000] has been exceeded
  • SwiftUI 3.Button介绍和使用
  • Python爬虫学习:高校数据爬取与可视化
  • UIAutomator 与 Playwright 在 AI 自动化中的界面修改对比
  • Java学习手册:Web 安全基础
  • MyBatis 升级至 MyBatis-Plus 详细步骤
  • 常用嵌入式软件代码编码规范的关系和覆盖
  • 海康NVR配置NAS-TrueNAS
  • Mysql 简单数据查询
  • 知识储备-后仿
  • AtCoder Beginner Contest 402题解
  • Pillow库中的convert(“L“)彩色图像转换灰度图像详解~
  • 2026《数据结构》考研复习笔记六(串的KMP算法)
  • 【网工第6版】第5章 网络互联⑥
  • 《MySQL:MySQL表的内外连接》