以AVL树为例理解二叉树的旋转(Rotate)操作

简介:

树旋转是在二叉树中的一种子树调整操作, 每一次旋转并不影响对该二叉树进行中序遍历的结果. 树旋转通常应用于需要调整树的局部平衡性的场合. 树旋转包括两个不同的方式, 分别是左旋转和右旋转. 两种旋转呈镜像, 而且互为逆操作.

 平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n)

 

AVL树的旋转一共有四种情形,注意所有旋转情况都是围绕着使得二叉树不平衡的第一个节点展开的。

 

1. LL型

    平衡二叉树某一节点的左孩子的左子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向右旋转一次即可,如图所示,原A的左孩子B变为父结点,A变为其右孩子,而原B的右子树变为A的左子树,注意旋转之后Brh是A的左子树(图上忘在A于Brh之间标实线)



2. RR型

    平衡二叉树某一节点的右孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向左旋转一次即可,如图所示,原A右孩子B变为父结点,A变为其左孩子,而原B的左子树Blh将变为A的右子树。



3. LR型

      平衡二叉树某一节点的左孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时需要旋转两次,仅一次的旋转是不能够使二叉树再次平衡。如图所示,在B节点按照RR型向左旋转一次之后,二叉树在A节点仍然不能保持平衡,这时还需要再向右旋转一次。



4. RL型

      平衡二叉树某一节点的右孩子的左子树上插入一个新的节点,使得该节点不再平衡。同样,这时需要旋转两次,旋转方向刚好同LR型相反。



本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/6667246.html,如需转载请自行联系原作者

相关文章
|
8月前
|
NoSQL IDE MongoDB
Studio 3T 2025.11 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.11 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
482 3
|
Ubuntu 开发工具
Ubuntu更换阿里云软件源
Ubuntu更换阿里云软件源
144989 0
|
6月前
|
前端开发
Promise.all()方法的作用是什么?
Promise.all()方法的作用是什么?
546 121
|
6月前
|
缓存 自然语言处理 Android开发
Magnet Axiom 9.5 新增功能概览 - 数字取证与分析
Magnet Axiom 9.5 新增功能概览 - 数字取证与分析
230 5
Magnet Axiom 9.5 新增功能概览 - 数字取证与分析
|
消息中间件 监控 数据挖掘
【有奖实践】轻量消息队列(原 MNS)订阅 OSS 事件实时处理文件变动
当你需要对对象存储 OSS(Object Storage Service)中的文件变动进行实时处理、同步、监听、业务触发、日志记录等操作时,你可以通过设置 OSS 的事件通知规则,自定义关注的文件,并将 OSS 事件推送到轻量消息队列(原 MNS)的队列或主题中,开发者的服务即可及时收到相关通知,并通过消费消息进行后续的业务处理。
301 102
|
数据采集 JavaScript 搜索推荐
ssr(Nuxt+Next.js)
服务器端渲染(SSR)技术可在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js基于Vue.js,提供自动化路由管理、页面级数据获取和模块化扩展;Next.js基于React.js,支持SSR、静态生成和文件系统路由。两者均具备快速加载、SEO友好和处理复杂页面的优点,但也存在服务器压力大、开发限制和调试困难的缺点。开发者可根据项目需求和技术栈选择合适的框架。
255 2
|
人工智能 自然语言处理 PyTorch
Bamba-9B:基于 Mamba2 架构的仅解码语言模型,旨在提高大型语言模型在推理时的效率
Bamba-9B 是由 IBM、普林斯顿大学、卡内基梅隆大学和伊利诺伊大学香槟分校联合推出的基于 Mamba2 架构的仅解码语言模型。该模型在开放数据集上训练,旨在提高大型语言模型的推理效率,特别是在处理长文本时的内存带宽瓶颈。Bamba-9B 在推理时相较于标准变换器模型展现出 2.5 倍的吞吐量提升和 2 倍的延迟加速。
452 12
Bamba-9B:基于 Mamba2 架构的仅解码语言模型,旨在提高大型语言模型在推理时的效率
|
数据采集 存储 监控
CDGA|数据治理:让数据与业务伴生的实践路径
在数据驱动的时代,数据已成为企业宝贵资产,蕴含推动业务增长与创新的无限可能。数据治理通过科学策略挖掘、整合、保护数据,成为企业数字化转型的核心驱动力。本文阐述了数据治理的定义、重要性及其实践路径,强调跨部门协作与全员参与,确保数据质量、安全及合规性,支持企业战略目标实现。通过明确数据战略、建立管理体系、推动数据共享和持续优化,数据治理助力企业实现数据与业务的伴生共长。
1232 0
|
安全 Java
Logback 实现日志链路追踪
Logback 实现日志链路追踪
405 1
|
设计模式 安全 Java
谈谈springboot的代理模式
【4月更文挑战第13天】在Spring Boot和Spring框架中,代理模式是一个核心的设计模式,被广泛用于实现面向切面编程(AOP)的功能。这种模式允许Spring通过代理对象来增强目标对象的行为,比如添加事务管理、安全控制、日志记录等功能,而不需要修改目标对象的代码
745 5