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

C++ RB_Tree

一、红黑树是什么?—— 带颜色标记的平衡二叉搜索树

红黑树是一种自平衡二叉搜索树,它在每个节点上增加了一个颜色属性(红色或黑色),通过对颜色的约束来确保树的大致平衡。这种平衡策略被称为 "弱平衡",相较于严格平衡的 AVL 树,它允许节点间的高度差不超过两倍,从而减少了旋转操作的频率,提升了动态数据操作的效率。

核心特性:

  • 二叉搜索树属性:左子树所有节点值小于根节点,右子树所有节点值大于根节点
  • 颜色标记机制:每个节点非红即黑,通过颜色调整维持平衡
  • 近似平衡:任何节点到其后代叶子节点的最长路径,不超过最短路径的 2 倍

二、红黑树的三大核心优势

1. 稳定的对数时间复杂度

  • 查找 / 插入 / 删除均保持 O (log n) 的时间复杂度,优于普通 BST 的 O (n) 最坏情况
  • 对比 AVL 树:虽然 AVL 树高度平衡(高度差≤1),但红黑树在频繁插入删除场景下,旋转次数更少,实际性能更优

2. 高效的动态数据操作

  • 插入和删除时仅需最多 2 次旋转(AVL 树可能需要 4 次)
  • 颜色重涂操作复杂度远低于树结构调整,适合处理频繁变更的数据集合

3. 广泛的实际应用

  • Java 集合框架:TreeMap 和 TreeSet 的底层实现
  • C++ STL:map、multimap 内部采用红黑树
  • Linux 内核:用于管理内存区域(vm_area_struct)
  • Nginx:实现对客户端请求的高效管理

三、红黑树的五条核心规则(必须严格遵守)

规则 1:节点颜色二值化

每个节点只能是红色或黑色,这是整个约束体系的基础。

规则 2:根节点恒定为黑色

确保树的最顶层始终为黑色,避免出现根节点为红色带来的平衡隐患。

规则 3:叶子节点全为黑色

这里的叶子节点指的是 NIL 空节点(外部节点),所有真实节点的叶子都指向这些黑色哨兵节点。

规则 4:红色节点必有黑色子节点

任何红色节点的左右子节点必须为黑色,防止出现 "红 - 红" 相邻的情况,这是维持平衡的关键约束。

规则 5:黑色高度统一

从任一节点到其所有后代叶子节点的路径上,包含的黑色节点数量必须相同。这个 "黑色高度" 的一致性,保证了树的最长路径不超过最短路径的 2 倍(因为红色节点不能连续出现,最长路径 = 黑色高度 + 红色节点数,而红色节点数≤黑色高度)。

比如我们看这课树

看起来好像是红黑树!!!

但是实际上我们把NULL节点画出来会发现每条路径上的黑色节点个数并不相同

所以它不是一棵二叉树

根据红黑树的五条性质可以保证

红黑树最长路径长度(节点数)不超过最短路径长度的 2 倍(含NULL节点)

 

四、红黑树的平衡维护机制

当插入或删除节点导致颜色规则被破坏时,通过两种操作恢复平衡:

  1. 颜色重涂:改变节点颜色(红→黑或黑→红)
  2. 树旋转:分为左旋和右旋,调整树结构
  3. 下面以图的形成呈现

注意以下错误示范 

http://www.lryc.cn/news/2391786.html

相关文章:

  • 命令模式,观察者模式,状态模式,享元模式
  • kibana解析Excel文件,生成mapping es导入Excel
  • 开疆智能Profinet转Profibus网关连接EC-CM-P1 PROFIBUS DP从站通讯模块配置案例
  • Oracle RMAN自动恢复测试脚本
  • 零基础设计模式——结构型模式 - 代理模式
  • 架构意识与性能智慧的双重修炼
  • Dynamics 365 Business Central AI Sales Order Agent Copilot
  • RabbitMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 选型指南(一)
  • CAS会产生什么问题以及如何解决
  • 汽车EPS系统的核心:驱动芯片的精准控制原理
  • 【Linux网络编程】传输层协议TCP,UDP
  • 基于Geotools的Worldpop世界人口tif解析-以中国2020年数据为例
  • Unity3D仿星露谷物语开发55之保存游戏到文件
  • 【无标题】C++23新特性:支持打印volatile指针
  • 【第4章 图像与视频】4.2 图像的缩放
  • 针对C语言的开发工具推荐及分析(涵盖编辑器、集成开发环境(IDE)、编译器、调试工具及辅助工具)
  • 在 WSL Ubuntu-24.04 上安装 Nacos 2.5.1 并使用 MySQL 数据库
  • 敏捷开发中如何避免迭代失控
  • Python基础 | jupyter工具的安装与基本使用
  • Python开发AI智能体(九)———构建RAG对话应用
  • NW907NW918美光固态闪存NW920NW930
  • 【Deepseek 学网络互联】跨节点通信global 和节点内通信CLAN保序
  • Python 迭代器:从基础到高级
  • 9.5 Q1 | 北京协和医学院GBD发文 | 1990-2021 年全球、区域和国家心力衰竭负担及其根本原因
  • 软件工程 3.0:智能驱动的软件新时代
  • 从C++编程入手设计模式1——单例模式
  • 根据Cortex-M3(包括STM32F1)权威指南讲解MCU内存架构与如何查看编译器生成的地址具体位置
  • vue的h函数(在 Vue 2中也称为 createElement)理解
  • MCP入门实战(极简案例)
  • STM32中,如何理解看门狗