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

平衡树的左旋

好的,树的左旋(Left Rotation)是平衡二叉树(如 ​AVL树​ 或 ​红黑树)中用于恢复平衡的一种基本操作。它通常是在右子树过高时进行,通过调整节点位置来降低高度。

为了更直观地理解,我们来看一个左旋的示意图。下图展示了以节点 P为根进行左旋的过程:


核心思想

左旋操作围绕一个节点(如上图的 P)进行,将其“下放”到其右子节点(Q)的左侧,并让 Q成为新的根节点。这就像把树的局部结构向左“旋转”了一下。

左旋步骤(围绕节点 P旋转)​

假设我们对节点 P进行左旋,其右子节点为 Q

  1. 接管左子树​:将 Q的左子树(B)作为 P的新右子树。

  2. 更新父指针​:如果 Q有左子树 B,则将其父指针指向 P

  3. 链接新父子​:将 P的父节点(如果存在)指向 Q,建立新的父子关系。

  4. 确立新关系​:将 Q的左子节点设置为 P,完成旋转。

伪代码(C++风格)​

// 假设节点结构为:
struct Node {int key;Node *left;Node *right;// AVL树可能还包含:int height;// 红黑树可能还包含:string color;
};Node* leftRotate(Node *P) {// 1. 获取 P 的右子节点 QNode *Q = P->right;// 2. 将 Q 的左子树作为 P 的新右子树P->right = Q->left;// 3. 让 P 成为 Q 的新左子节点Q->left = P;// 4. 更新节点的高度(或平衡因子),这部分是平衡树特有的维护逻辑// updateHeight(P);// updateHeight(Q);// 5. 返回新的根节点 Q,调用者需要将其与树的其他部分连接return Q;
}

时间复杂度

O(1)。该操作只涉及修改有限数量的指针,是常数时间复杂度。

何时使用左旋?​

左旋是平衡二叉树算法的核心子例程。当检测到某个节点的右子树比左子树高​(即“不平衡”)时,就会根据具体情况使用左旋或先右旋再左旋(LR旋转)来恢复平衡。

操作

数据结构

目的

链表左旋

线性链表

循环移位

树左旋

平衡二叉树(AVL, 红黑树)

降低高度,恢复平衡

希望这个解释和示意图能帮助你清晰地理解树的左旋操作!

http://www.dtcms.com/a/358604.html

相关文章:

  • 在 WSL2-NVIDIA-Workbench 中安装Anaconda、CUDA 13.0、cuDNN 9.12 及 PyTorch(含完整环境验证)
  • 第二十六天-ADC基本原理
  • 学习大模型,还有必要学习机器学习,深度学习和数学吗
  • 苍穹外卖项目笔记day02
  • 嵌入式学习笔记--LINUX系统编程--DAY03进程控制
  • 在 .NET Core 中实现基于策略和基于角色的授权
  • 【系列10】端侧AI:构建与部署高效的本地化AI模型 第9章:移动端部署实战 - iOS
  • SpringAI应用开发面试剧本与技术知识全解析:RAG、向量数据库、多租户与企业落地场景
  • 【工具类】ssh使用案例
  • 26届秋招开始啦
  • UE5多人MOBA+GAS 56、WSL + Docker 编排 Linux 服务器与 Windows 客户端
  • 【PCIE系列】1---PCIE系统拓扑结构分析
  • 基于TCN-BiLSTM-SelfAttention神经网络的多输入单输出回归预测【MATLAB】
  • 得物25年春招-安卓部分编程题
  • Odoo与Django 的区别是什么?
  • Ztero文献管理工具插件设置——亲测有效
  • Python实现点云AABB和OBB包围盒
  • 合金电阻选型7大原则-华年商城
  • 趣味学RUST基础篇(结构体方法)
  • 软考中级习题与解答——第一章_数据结构与算法基础(2)
  • 线性代数理论——状态空间
  • uniapp开发 移动端使用字符串替换注意事项
  • CrystalDiskInfo 9.0 最新版安装步骤详解(从下载到查看硬盘状态)​
  • 三重积分的对称性
  • React前端开发_Day6-Day9_极客园项目
  • Spring Data Redis 的使用方法
  • Dify工作流之合同信息提取
  • 【C++】AVL树(详解)
  • Coze源码分析-API授权-获取令牌列表-前端源码
  • Spring注解演进与自动装配原理深度解析:从历史发展到自定义Starter实践