实用指南:清楚易懂的红黑树讲解
2026-01-21 22:48 tlnshuju 阅读(0) 评论(0) 收藏 举报一、红黑树的基本概念
红黑树是一种自平衡的二叉搜索树。它在二叉搜索树的基础上,在每个节点上增加了一个存储位来表示节点的颜色(红色或黑色)。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是近似平衡的。
二、红黑树的五大性质(核心规则)
正是这五个性质,保证了红黑树的平衡性:
节点是红色或黑色。
黑色就是根节点。
所有叶子节点都是黑色。(这里的叶子节点指的是为空
NIL的节点)红色节点的两个子节点都必须是黑色。(也就是说,不能有两个连续的红色节点)
从任一节点到其每个叶子节点的所有容易路径都含有相同数目的黑色节点。
第5条性质是红黑树平衡的关键,它定义了“黑色高度”的概念。从根节点到最远叶子节点的路径长度(主要取决于黑色节点数)不会超过到最近叶子节点路径长度的两倍,这就保证了平衡。

三、红黑树的 “等价交换”:核心逻辑
红黑树的等价交换,本质是 “利用保持红黑树 5 大性质的节点替换 / 结构调整”—— 无论是节点值的替换,还是子树的整体替换,最终都要保证交换后树依然满足红黑树的约束条件,确保树的平衡和 O (log n) 的查询 / 插入 / 删除效率。
场景 1:节点值交换(同位置替换,无结构变化)
核心逻辑
- 交换两个节点的值(key / 数据),但不改变节点的颜色、父子关系、子树结构;
- 本质是 “内容层面的交换”,不影响红黑树的结构,因此只要交换前树是合法的,交换后依然合法(无需额外调整)。
场景 2:子树等价交换(结构替换,需保持黑高平衡)
核心逻辑
- 用一棵合法的子树 T2替换另一棵子树 T1(T1 和 T2 的根节点位置相同);
- “红黑等价” 的 —— 即两棵子树的就是关键约束:T1 和 T2 必须根节点颜色相同,且黑高相同(从根到叶子的黑色节点数一致),否则会破坏红黑树的性质 4 或 5。
四、红黑树的管理
插入操作
插入新节点时初始为红色,可能破坏红黑树性质,需依据调整恢复平衡:
- 情况1:新节点是根节点,直接变为黑色。
- 情况2:父节点为黑色,无需调整。
- 情况3:父节点和叔节点均为红色,将父节点和叔节点变黑,祖父节点变红,并递归处理祖父节点。
- 情况4:父节点为红而叔节点为黑(或NIL),且新节点与父节点方向不一致(如父节点为左子,新节点为右子),对父节点左旋或右旋,转化为情况5。
- 情况5:父节点为红而叔节点为黑,且新节点与父节点方向一致,将父节点变黑,祖父节点变红,并对祖父节点旋转。
删除操作
删除节点后可能破坏黑高或产生连续红色节点,需分类处理:
- 情况1:删除节点为红色,直接移除不影响性质。
- 情况2:删除节点为黑色且替代节点为红色,将替代节点变黑。
- 情况3:删除节点和替代节点均为黑色,通过旋转和重新着色调整,可能涉及兄弟节点及其子节点的颜色判断。
五、红黑树的应用场景
- 关联容器实现:如C++的
std::map和std::set底层通常为红黑树。 - 数据库索引:部分数据库引擎使用红黑树维护有序数据。
- 实时系统:因最坏情况下仍为O(log n),适合时间敏感场景。
六、红黑树与AVL树的对比
- 平衡严格性:AVL树要求更严格的平衡(高度差≤1),查询效率略高;红黑树平衡条件更宽松,插入/删除效率更高。
- 旋转次数:红黑树旋转次数较少,适合频繁修改的场景。
- 存储开销:红黑树仅需1位存储颜色,AVL树需存储平衡因子(通常2位)。
红黑树的实现示例(伪代码)
class Node:def __init__(self, value, color='RED'):self.value = valueself.left = Noneself.right = Noneself.parent = Noneself.color = color
def fix_insertion(node):while node.parent and node.parent.color == 'RED':if node.parent == node.parent.parent.left:uncle = node.parent.parent.rightif uncle and uncle.color == 'RED': # Case 3node.parent.color = 'BLACK'uncle.color = 'BLACK'node.parent.parent.color = 'RED'node = node.parent.parentelse:if node == node.parent.right: # Case 4node = node.parentleft_rotate(node)# Case 5node.parent.color = 'BLACK'node.parent.parent.color = 'RED'right_rotate(node.parent.parent)else:# 对称处理右子树情况passroot.color = 'BLACK'
红黑树通过上述规则和操作,在动态数据集中高效维持平衡,是工程中广泛使用的数据结构之一。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196549.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
Java计算机毕设之基于springboot的元宇宙平台的房屋租赁管理系统基于springboot + vue房屋租赁管理系统(完整前后端代码+说明文档+LW,调试定制等)
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
迈向意义共治的智能文明:一份关于AI时代新范式的框架性阐述
迈向意义共治的智能文明:一份关于AI时代新范式的框架性阐述
致读者:
本文旨在为关注人工智能、平台治理与未来文明形态的研究者与实践者,提供一份跨越哲学、技术与制度的综合性思考框架。它不追求提供即时可用的“答…
学习日记之狂神说Java
学习日记之狂神说Java标题
骄傲
骄傲
骄傲
骄傲
字体
Hello World!
Hello World!
Hello World!
Hello World!
引用狂神说Java分割线图片超链接
抖音
Java计算机毕设之基于springboot的婚庆公司服务平台的设计与实现婚庆摄影(完整前后端代码+说明文档+LW,调试定制等)
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
Java毕设项目:基于springboot的婚庆公司服务平台的设计与实现(源码+文档,讲解、调试运行,定制等)
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
【性能测试】14_JMeter _JMeter测试报告
文章目录 一、聚合报告1.1 各项指标含义1.2 重点关心的性能指标1.3 导出聚合报告 二、生成html测试报告2.1 命令2.1.1 方法1:相对路径 (首选)2.1.2 方法2:绝对路径执行 三、查看html测试报告3.1 Dashboard(概览仪表盘)3.1.1 Test …
【毕业设计】基于springboot的实验设备借用平台的设计与实现 实验室设备租赁系统(源码+文档+远程调试,全bao定制等)
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
Java毕设选题推荐:基于SpringBoot+Vue+MySQL 房屋租赁管理系统平台基于springboot的元宇宙平台的房屋租赁管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
2026必备!10个AI论文工具,助本科生轻松写论文!
2026必备!10个AI论文工具,助本科生轻松写论文!
AI 工具如何改变论文写作的未来
在 2026 年,随着人工智能技术的不断成熟,AI 工具已经成为本科生撰写论文的重要助手。无论是初稿的生成、内容的润色,还是降…
【课程设计/毕业设计】基于springboot+vue的婚庆公司服务网站管理系统基于springboot的婚庆公司服务平台的设计与实现【附源码、数据库、万字文档】
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
K8s新手入门:从“Pod创建”到“服务暴露”,3个案例理解容器编排
一、案例1:单Pod部署(Nginx应用)
目标:用命令行创建并验证Pod 创建Pod bashkubectl run nginx-pod --imagenginx:1.14 --port80 注:镜像选择参考智优达Docker容器化部署指南,优先使用指定版本标签&#x…
【旋转式多线激光雷达】旋转式多线激光雷达工作原理
大多数常见的旋转式多线激光雷达(如16线、32线、64线雷达)并不是物理意义上的“完全同时”发射所有激光束。
原因和实际情况如下: 避免干扰和简化设计: 如果所有激光器(每条“线”对应一个或多个激光器)在同一瞬间发射高功率激光脉冲,它们产生的光束在空间中可能非常接…
ClickHouse在农业大数据分析中的创新应用
ClickHouse在农业大数据分析中的创新应用 关键词:ClickHouse、农业大数据、时序数据分析、实时聚合、智能农业 摘要:本文将带你走进「农业+大数据」的奇妙世界,揭秘为什么全球顶尖农场和农业科技公司选择ClickHouse作为核心数据分析引擎。我们会用「种草莓的王大爷」这样的生…
【毕业设计】基于springboot的婚庆公司服务平台的设计与实现(源码+文档+远程调试,全bao定制等)
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。 - 指南
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
agentscope记忆模块使用和部署agent-memory-server记忆服务
参考资料https://doc.agentscope.io/zh_CN/tutorial/task_memory.htmlhttps://bai-lab.github.io/MemoryOS/docshttps://github.com/BAI-LAB/MemoryOShttps://docs.mem0.ai/open-source/python-quickstarthttps://redi…
AI Agent核心技术揭秘:概念辨析、商业化路径与实践指南,值得收藏
文章解析了AI Agent的概念、商业化前景及发展方向。AI Agent被定义为循环调用工具的大语言模型,具有调用工具、完成复杂任务等优势,比聊天机器人更具商业价值。编程领域是Agent最先落地的场景,Skills生态正在兴起。尽管Agent本身难以形成垂直…
Java程序员转型大模型开发全攻略:月薪30K+的AI工程师成长路径_程序员转行AI大模型教程(非常详细)
本文为Java程序员提供大模型转型指南,包括五大学习步骤:基础知识、工具框架、编程能力、数学储备和项目实践。发挥Java工程师在软件架构方面的优势,掌握AI时代高薪岗位所需技能。大模型领域岗位缺口达47万,初级工程师平均薪资28K。…
docker部署及基本要点
一、核心内容整理Docker 核心概念与关联技术
Docker 是基于 Go 语言开发的容器化软件,核心解决软件安装部署的环境一致性问题,常应用于大模型部署(如 deepseek)等 AI 场景;K8s(Kubernetes,谷歌开发)是 Docker …
【课程设计/毕业设计】基于springboot + vue房屋租赁管理系统基于springboot的元宇宙平台的房屋租赁管理系统【附源码、数据库、万字文档】
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…