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

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.xdnf.cn/news/9707.html

相关文章:

  • 数据仓库分层 4 层模型是什么?
  • 请问Java方法可以同时即是static又是synchronized的吗?
  • 国内高频混压PCB厂家有哪些?
  • react-color-palette源码解析
  • Unity 快捷键
  • Python 字符串入门指南
  • 循环神经网络(RNN)模型
  • vue3 + WebSocket + Node 搭建前后端分离项目 开箱即用
  • 执行npm命令报在此系统禁止运行脚本
  • 多模态大语言模型arxiv论文略读(九十九)
  • 【深度学习】11. Transformer解析: Self-Attention、ELMo、Bert、GPT
  • 【深度学习:进阶篇】--2.3.深度学习正则化
  • 通过远程桌面连接Windows实例提示“出现身份验证错误,无法连接到本地安全机构”错误怎么办?
  • 【Python零基础入门系列】第6篇:Python 的数据结构世界(列表、字典、集合、元组)
  • 深入解析ThreadPoolExecutor设计精髓
  • 数字孪生数据监控如何提升汽车零部件工厂产品质量
  • EasyRTC音视频实时通话助力微信小程序:打造低延迟、高可靠的VoIP端到端呼叫解决方案
  • 园区智能化集成平台汇报方案
  • uniapp 实现腾讯云 IM 消息已读回执
  • Ubuntu Zabbix 钉钉报警
  • 职坐标AI算法实战:TensorFlow/PyTorch深度模型
  • 【案例分享】蓝牙红外线影音遥控键盘:瑞昱RTL8752CJF
  • Python量化交易12——Tushare全面获取各种经济金融数据
  • LVS + Keepalived高可用群集
  • LVS-Keepalived高可用群集
  • 【unity游戏开发——编辑器扩展】EditorApplication公共类处理编辑器生命周期事件、播放模式控制以及各种编辑器状态查询
  • 算法-js-子集
  • 【论文精读】2024 CVPR--Upscale-A-Video现实世界视频超分辨率(RealWorld VSR)
  • 【计算机常识】--环境变量
  • 双路物理CPU机器上安装Ubuntu并部署KVM以实现系统多开