C++ RB_Tree

news2025/5/31 20:44:04

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

红黑树是一种自平衡二叉搜索树,它在每个节点上增加了一个颜色属性(红色或黑色),通过对颜色的约束来确保树的大致平衡。这种平衡策略被称为 "弱平衡",相较于严格平衡的 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.coloradmin.cn/o/2391786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kibana解析Excel文件,生成mapping es导入Excel

一、Excel转为CSV格式 在线免费网站:EXCEL转CSV - 免费在线将EXCEL文件转换成CSV (cdkm.com) 二、登录kibana 点击左边菜单栏找到Machine Learning, 进入后上面菜单选择Data Visualizer,然后上穿转好的csv格式的Excel 点击导入输入建立的m…

开疆智能Profinet转Profibus网关连接EC-CM-P1 PROFIBUS DP从站通讯模块配置案例

本案例是通过开疆智能Profibus转Profinet网关将正弦研发的Profibus从站模块连接的EM600变频器接入到西门子1200PLC的配置案例。 配置过程 1. 打开网关配置软件“”新建项目并添加模块PN2DPM并设置参数 2. 设置网关的Profibus参数。如站地址,波特率等。(…

Oracle RMAN自动恢复测试脚本

说明 此恢复测试脚本,基于rman备份脚本文章使用的fullbak.sh做的备份。 数据库将被恢复到RESTORE_LO参数设置的位置。 在恢复完成后,执行一个测试sql,确认数据库恢复完成,数据库备份是好的。恢复测试数据库的参数,比如SGA大小都…

零基础设计模式——结构型模式 - 代理模式

第三部分:结构型模式 - 代理模式 (Proxy Pattern) 在学习了享元模式如何通过共享对象来优化资源使用后,我们来探讨结构型模式的最后一个模式——代理模式。代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。 核心思想:为其…

架构意识与性能智慧的双重修炼

架构意识与性能智慧的双重修炼 ——现代软件架构师的核心能力建设指南 作者:蓝葛亮 🎯引言 在当今快速发展的技术环境中,软件架构师面临着前所未有的挑战。随着业务复杂度的不断增长和用户对性能要求的日益严苛,如何在架构设计中平衡功能实现与性能优化,已成为每个技术…

Dynamics 365 Business Central AI Sales Order Agent Copilot

#AI Copilot# #D365 BC 26 Wave# 最近很多客户都陆续升级到 Dynamics 365 Business Central 26 wave, Microsoft 提供一个基于Copilot 的Sales Order Agent,此文将此功能做个介绍. Explorer: 可以看到26版本上面增加了这样一个新图标。 Configuration: 配置过程…

RabbitMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 选型指南(一)

一、引言 ** 在当今分布式系统大行其道的技术时代,消息队列作为分布式系统的关键组件,起着举足轻重的作用。它就像是一个可靠的信使,在不同的系统模块、服务之间传递信息,让各个部分能够高效、稳定地协同工作。消息队列能够实现系…

汽车EPS系统的核心:驱动芯片的精准控制原理

随着科技的飞速发展,电机及其驱动技术在现代工业、汽车电子、家用电器等领域扮演着越来越重要的角色。有刷马达因其结构简单、成本低廉、维护方便等优点,在市场上占据了一定的份额。然而,为了充分发挥有刷马达的性能,一款高效能、…

【Linux网络编程】传输层协议TCP,UDP

目录 一,UDP协议 1,UDP协议的格式 2,UDP的特点 3,面向数据报 4,UDP的缓冲区 5,UDP使用注意事项 6,基于UDP的应用层协议 二,对于报文的理解 三,TCP协议 1&…

基于Geotools的Worldpop世界人口tif解析-以中国2020年数据为例

目录 前言 一、Worldpop数据简介 1、数据来源 2、QGIS数据展示 3、元数据展示 二、GeoTools人口解析 1、Maven依赖引入 2、Tif人口计算 三、总结 前言 在当今数字化与信息化飞速发展的时代,地理空间数据的分析与应用已然成为诸多领域研究与决策的关键支撑。…

Unity3D仿星露谷物语开发55之保存游戏到文件

1、目标 将游戏保存到文件,并从文件中加载游戏。 Player在游戏中种植的Crop,我们希望保存到文件中,当游戏重新加载时Crop的GridProperty数据仍然存在。这次主要实现保存地面属性(GridProperties)信息。 我们要做的是…

【无标题】C++23新特性:支持打印volatile指针

文章目录 前言背景与问题C23的解决方案实现原理使用场景硬件开发多线程调试 总结 前言 在C开发中,volatile关键字常用于修饰变量,以确保编译器不会对这些变量进行优化,从而保证程序能够正确地与硬件交互或处理多线程环境下的特殊变量。然而&…

【第4章 图像与视频】4.2 图像的缩放

文章目录 前言示例-图像的缩放在 Canvas 边界之外绘制图像 前言 在上节中读者已经学会了如何使用 drawImage() 方法将一幅未经缩放的图像绘制到 canvas 之中。现在我们就来看看如何用该方法在绘制图像的时候进行缩放 示例-图像的缩放 未缩放的图像,显示图形原有大…

敏捷开发中如何避免迭代失控

在敏捷开发过程中避免迭代失控,需要实施合理规划迭代目标、明确职责分工、强化沟通机制、严格控制需求变更等措施,其中合理规划迭代目标尤为重要,它确保团队聚焦于关键任务,避免因目标不清晰而导致的迭代混乱和失控。 一、合理规划…

Python开发AI智能体(九)———构建RAG对话应用

前言 上篇文章我们介绍了如何在Langchain中构建代理 这篇文章我们将带领大家构建一个RAG对话应用 一、什么是RAG对话应用? RAG(Retrieval-Augmented Generation,检索增强生成)技术通过从外部知识库检索相关信息,并将…

NW907NW918美光固态闪存NW920NW930

NW907NW918美光固态闪存NW920NW930 技术解析:美光NW系列固态闪存的核心突破 美光NW907、NW918、NW920、NW930四款固态闪存产品,代表了当前存储技术的顶尖水平。其核心创新在于G9 NAND架构的深度优化,采用更先进的5纳米制程工艺,…

【Deepseek 学网络互联】跨节点通信global 和节点内通信CLAN保序

Clan模式下的源端保序与Global类似,目的端保序则退化成通道保序,此时仅支持网络单路径保序。”这里的通道保序怎么理解? 用户可能正在阅读某种硬件架构文档(比如NVIDIA的NVLink或InfiniBand规范),因为"…

9.5 Q1 | 北京协和医学院GBD发文 | 1990-2021 年全球、区域和国家心力衰竭负担及其根本原因

1.第一段-文章基本信息 文章题目:Global, regional, and national burden of heart failure and its underlying causes, 1990-2021: results from the global burden of disease study 2021 中文标题:1990-2021 年全球、区域和国家心力衰竭负担及其根本…

根据Cortex-M3(包括STM32F1)权威指南讲解MCU内存架构与如何查看编译器生成的地址具体位置

首先我们先查看官方对于Cortex-M3预定义的存储器映射 1.存储器映射 1.1 Cortex-M3架构的存储器结构 内部私有外设总线:即AHB总线,包括NVIC中断,ITM硬件调试,FPB, DWT。 外部私有外设总线:即APB总线,用于…

MCP入门实战(极简案例)

MCP简介 MCP(Model Context Protocol,模型上下文协议)2024年11月底由 Antbropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。 Function Calling是AI模型调用函数的机制,MCP是一个标准协议,使AI模型与API无缝交互,而Al Agent是一个…