news 2026/5/21 14:41:06

AVL 树 LR 型旋转

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AVL 树 LR 型旋转

一、前置基础:插入后初始树结构与核心规则


在节点3的左孩子2的右子树位置插入节点2.5后,AVL树的初始结构如下(节点后括号内为树高,未标注则默认后续计算):

5 / \ 3 6 / \ 2 4 \ 2.5

核心前提的两个关键规则:

  1. 二叉搜索树(BST)规则:任意节点的左子树所有节点值均小于该节点值,右子树所有节点值均大于该节点值,即“左小右大”;
  2. AVL树平衡规则:任意节点的平衡因子BF=左子树高度-右子树高度,需满足|BF|≤1,若不满足则判定为失衡,需通过旋转矫正。

二、失衡判定:找到失衡节点与旋转类型


插入节点2.5后,需从插入节点向上回溯,计算每个节点的树高和平衡因子,找到首个失衡节点,并判定旋转类型。
(一)各节点树高与平衡因子计算

  1. 节点2.5:无左右子树,树高为1,BF=0(左高0-右高0),无失衡;
  2. 节点2:左子树高0,右子树高1(节点2.5的高度),树高为2,BF=0-1=-1,|BF|≤1,无失衡;
  3. 节点4:无左右子树,树高为1,BF=0,无失衡;
  4. 节点3:左子树高2(节点2的高度),右子树高1(节点4的高度),树高为3,BF=2-1=1,|BF|≤1,无失衡;
  5. 节点6:无左右子树,树高为1,BF=0,无失衡;
  6. 节点5:左子树高3(节点3的高度),右子树高1(节点6的高度),树高为4,BF=3-1=2,|BF|>1,判定为失衡,且是回溯过程中首个失衡节点。

(二)旋转类型判定(LR型)
旋转类型由失衡节点及其左、右孩子的平衡因子共同决定,具体判定逻辑如下:

  1. 失衡节点5的BF=2,说明左子树过高,失衡方向为“左偏重”;
  2. 失衡节点5的左孩子为节点3,节点3的BF=1,说明节点3的左子树偏高,但结合初始树结构可见,节点3的右子树(节点4)与插入节点2.5形成“左-右”折线结构(3→左2→右2.5,3→右4),本质是左子树的右分支偏高;
  3. 综上,判定为LR型失衡(左子树的右分支失衡),对应的矫正规则为:先左旋失衡节点的左子树节点(节点3),将折线结构转为直线结构,再右旋失衡节点(节点5),最终恢复树的平衡。


三、旋转操作步骤:分步执行,兼顾平衡与BST规则


LR型旋转需分两步执行,先左旋节点3,再右旋节点5,每一步操作都需严格遵循旋转规则,确保不破坏BST的“左小右大”特性,同时逐步矫正平衡因子。
第一步:左旋节点3(将LR型转为LL型)
左旋操作的核心目的是将节点3的“左-右”折线结构,转为“左-左”直线结构,为后续右旋操作铺垫,具体旋转规则及步骤如下:

  1. 确定旋转核心节点:以节点3为左旋节点,其右孩子节点4为旋转后的替代节点
  2. 节点转移:将节点4的左子树(此处为空)挂载到节点3的右孩子位置,替代原节点4的位置;
  3. 父子关系调整:将节点3作为节点4的左孩子,完成节点3与节点4的父子关系互换
  4. 树高更新:调整节点3和节点4的树高,节点3的树高变为2(左子树节点2的高度1+1),节点4的树高变为3(左子树节点3的高度2+1);
  5. 位置衔接:将旋转后的节点4,替代原节点3的位置,作为节点5的左孩子。
    左旋节点3后的中间态(已转为LL型结构):
5 / \ 4 6 / 3 / 2 \ 2.5

此时,节点5的左子树为节点4,形成“左-左”直线结构,LR型失衡已转为LL型失衡,满足后续右旋操作的条件。
第二步:右旋失衡节点5(恢复树的平衡)
右旋操作的核心目的是矫正节点5的左子树过高问题,将节点4晋升为新的子树根节点,使树恢复平衡,具体旋转规则及步骤如下:

  1. 确定旋转核心节点:以节点5为右旋节点,其左孩子节点4为旋转后的新根节点;
  2. 节点转移:将节点4的右子树(此处为空)挂载到节点5的左孩子位置,替代原节点4的位置;
  3. 父子关系调整:将节点5作为节点4的右孩子,完成节点5与节点4的父子关系互换;
  4. 树高更新:调整节点5和节点4的树高,节点5的树高变为2(右子树节点6的高度1+1),节点4的树高变为3(左子树节点3的高度2、右子树节点5的高度2,取最大值+1);
  5. 最终衔接:节点4成为该子树的新根节点,保持原有其他节点的父子关系不变(节点3仍为节点4的左孩子,节点6仍为节点5的右孩子)。

四、旋转最终结果与校验


(一)最终平衡AVL树结构
经过“左旋节点3→右旋节点5”两步操作后,最终得到的平衡AVL树结构如下:

4 / \ 3 5 / \ 2 6 \ 2.5

(二)双重校验:确保合规与平衡

  1. BST规则校验(左小右大):
  • 节点2的右孩子2.5:2<2.5,符合规则;
  • 节点3的左孩子2:2<3,符合规则;
  • 节点4的左子树(3、2、2.5)均小于4,右子树(5、6)均大于4,符合规则;
  • 节点5的右孩子6:5<6,符合规则;
    所有节点均满足“左小右大”,BST规则完全合规。
  1. AVL平衡规则校验(|BF|≤1):
  • 节点2.5:BF=0,节点2:BF=-1,节点3:BF=1,节点6:BF=0,节点5:BF=-1,节点4:BF=0;
  • 所有节点的平衡因子绝对值均不超过1,树的平衡状态完全恢复。


五、总结


本次AVL树旋转操作,核心是处理插入节点2.5后出现的LR型失衡,通过“先左旋左子节点、再右旋失衡节点”的两步操作,成功将失衡树矫正为平衡树。整个过程始终遵循BST“左小右大”和AVL“平衡因子≤1”的核心规则,先将折线结构转为直线结构,再通过旋转调整节点位置,最终实现树的平衡。
LR型旋转是AVL树中较复杂的旋转类型,关键在于准确判定失衡类型,分步执行旋转操作,每一步都兼顾节点位置调整和树高更新,确保旋转后既符合BST规则,又能恢复AVL树的平衡特性,本次操作最终得到的树结构即为合规、平衡的最终结果,无需进一步旋转。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 14:41:05

BS-RoFormer终极指南:如何用旋转位置编码技术实现SOTA音频分离

BS-RoFormer终极指南:如何用旋转位置编码技术实现SOTA音频分离 【免费下载链接】BS-RoFormer Implementation of Band Split Roformer, SOTA Attention network for music source separation out of ByteDance AI Labs 项目地址: https://gitcode.com/gh_mirrors/…

作者头像 李华
网站建设 2026/5/21 14:39:02

FLUX.1-dev FP8量化模型终极指南:6GB显卡也能玩转AI绘画

FLUX.1-dev FP8量化模型终极指南:6GB显卡也能玩转AI绘画 【免费下载链接】flux1-dev 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/flux1-dev 还在为高端显卡的昂贵价格而望而却步吗?FLUX.1-dev FP8量化模型就是为你量身打造的AI绘画…

作者头像 李华
网站建设 2026/5/21 14:37:11

如何在matlab中调用taotoken聚合大模型api接口

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何在 MATLAB 中调用 Taotoken 聚合大模型 API 接口 对于使用 MATLAB 进行科学计算、算法开发或数据分析的工程师和研究人员而言&…

作者头像 李华
网站建设 2026/5/21 14:37:10

终极指南:如何用YOLOv8 AI自动瞄准器提升FPS游戏体验

终极指南:如何用YOLOv8 AI自动瞄准器提升FPS游戏体验 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot 你是否在玩《使命召唤》、《战地》或《CS2》时总是瞄不准敌人&…

作者头像 李华
网站建设 2026/5/21 14:32:42

3大策略攻克HTML转Word格式丢失难题:html-to-docx实战指南

3大策略攻克HTML转Word格式丢失难题:html-to-docx实战指南 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 你是否曾花费数小时复制网页内容到Word,却发现格式全部丢失&#xf…

作者头像 李华