二叉搜索树——红黑树

article/2025/6/21 22:43:38

红黑树

  • 概念
  • 红黑树的原理
  • 红黑树的效率
  • 红黑树的插入规则
    • 变色
    • 旋转+变色
    • 红黑树的验证
  • 代码如下

概念

红黑树本质也是一颗二叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。
红黑树与AVL树相比对于平衡的要求更加宽松,也就是说红黑树相比于AVL树是少了很多旋转的过程。
红黑树的创建需要遵循以下四个规则

  1. 每个结点不是红⾊就是⿊⾊
  2. 根结点是⿊⾊的
  3. 如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红⾊结点。
  4. 对于任意⼀个结点,从该结点到其所有NULL结点的简单路径上,均包含相同数量的⿊⾊结点。
    在这里插入图片描述
    注意:第四点是要求到所有的NULL结点而不是叶子结点,因此在《算法导论》中,其将所有的NULL结点写成黑色的NIL。

在这里插入图片描述

红黑树的原理

红黑树是如何确保最长路径不超过最短路径的两倍的?

  1. 由规则4可知,从根到NULL结点的每条路径都有相同数量的⿊⾊结点,所以极端场景下,最短路径就就是全是⿊⾊结点的路径,假设最短路径⻓度为bh(black height)。
  2. 由规则2和规则3可知,任意⼀条路径不会有连续的红⾊结点,所以极端场景下,最⻓的路径就是⼀⿊⼀红间隔组成,那么最⻓路径的⻓度为2*bh。
  3. 综合红⿊树的4点规则⽽⾔,理论上的全⿊最短路径和⼀⿊⼀红的最⻓路径并不是在每棵红⿊树都存在的。假设任意⼀条从根到NULL结点路径的⻓度为x,那么bh <= h <= 2*bh。

红黑树的效率

如果N是红黑树的结点,h是最短路径长度,所以2h<=N<22*h-1,所以时间复杂度约为logN

红黑树的插入规则

变色

首先,插入的结点一定是红色的,因为这才不会改变整体每条路径上的黑色结点数目,这里就需要进行分类了

  1. parent直接为黑色,直接插入红色结点即可。
  2. parent为红色,由于不能有连续的红色结点,所以需要将parent变为黑色,但由于需要保证黑色结点数目不变,这里如果uncle存在且为红,就将parent与uncle都变为黑色,同时将grandparent变为黑色。
    这两种情况只需要进行变色处理而不用旋转

旋转+变色

如果uncle存在且为黑色或者uncle不存在,那就需要进行旋转+变色,如果是这样

//		g
//   p		u
// c
//或者
// 		g
//	 p
//c

就进行右单旋+变色,将parent变为黑色,grandparent变为红色,其余情况就不一一列举,有右单旋+变色,有双旋+变色,旋转的情况和AVL其中一样。

红黑树的验证

验证该树是不是红黑树,其实只需要判断每条路径上面的黑色结点是否相同即可

代码如下

红黑树


http://www.hkcw.cn/article/UxakYlRhsQ.shtml

相关文章

PCB设计教程【强化篇】——USB拓展坞元件选型

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 USB 拓展坞项目概述…

C++11新特性lambda的使用详解

得益于C11的发布&#xff0c;提供了提高效率的语法&#xff0c;C11以后是现代C&#xff0c;C98是传统C&#xff0c;这里来介绍lambda的使用和原理。 目录 1.lambda 2.列表捕捉 3&#xff0c;lambda的应用 4&#xff0c;lambda原理 1.lambda lambda表达式本质是一个匿名函…

4000万日订单背后,饿了么再掀即时零售的“效率革命”

当即时零售转向价值深耕&#xff0c;赢面就是综合实力的强弱。 文&#xff5c;郭梦仪 编&#xff5c;王一粟 在硝烟弥漫的外卖行业“三国杀”中&#xff0c;饿了么与淘宝闪购的日订单量竟然突破了4000万单。 而距淘宝闪购正式上线&#xff0c;还不到一个月。 在大额福利优惠…

PostIn入门教程 - 使用IDEA插件快速生成API接口定义

PostIn是一款国产开源免费的接口管理工具&#xff0c;包含项目管理、接口调试、接口文档设计、接口数据MOCK等模块&#xff0c;支持常见的HTTP协议、websocket协议等。IDEA插件支持扫描代码自动生成接口文档并上传到PostIn系统。本文将详细介绍怎么安装IDEA插件&#xff0c;使用…

在RTX5060Ti上进行Qwen3-4B的GRPO强化微调

导语 最近赶上618活动&#xff0c;将家里的RTX 4060显卡升级为了RTX 5060Ti 16GB版本&#xff0c;显存翻了一番&#xff0c;可以进行一些LLM微调实验了&#xff0c;本篇博客记录使用unsloth框架在RTX 5060Ti 16GB显卡上进行Qwen3-4B-Base模型的GRPO强化微调实验。 简介 GPU性…

用户认证的魔法配方:从模型设计到密码安全的奇幻之旅

title: 用户认证的魔法配方:从模型设计到密码安全的奇幻之旅 date: 2025/05/31 09:34:15 updated: 2025/05/31 09:34:15 author: cmdragon excerpt: 用户认证体系的核心在于用户模型设计和密码安全规范。用户模型需包含唯一用户名、邮箱、加密密码等基础字段,使用SQLAlche…

Kafka ACK机制详解:数据可靠性与性能的权衡之道

在分布式消息系统中&#xff0c;消息确认机制是保障数据可靠性的关键。Apache Kafka 通过 ACK&#xff08;Acknowledgment&#xff09;机制 实现了灵活的数据确认策略&#xff0c;允许用户在 数据可靠性 和 系统性能 之间进行权衡。本文将深入解析 Kafka ACK 机制的工作原理、配…

ARM改口了,小米XRING O1真的是自研芯片

上周小米发布XRING O1芯片的时候&#xff0c;业内议论纷纷。有人说这不过是换个马甲的ARM方案&#xff0c;有人质疑小米的技术实力。但是这两天&#xff0c;ARM官方主动出来澄清了——小米的XRING O1确实没有使用ARM的CSS客户端平台解决方案。 这个转折挺有意思的。ARM作为IP授…

android 媒体框架之MediaCodec

一、MediaCodec 整体架构与设计思想 MediaCodec 是 Android 底层多媒体框架的核心组件&#xff0c;负责高效处理音视频编解码任务。其架构采用 生产者-消费者模型&#xff0c;通过双缓冲区队列&#xff08;输入/输出&#xff09;实现异步数据处理&#xff1a; 输入缓冲区队列…

浅谈 PAM-2 到 PAM-4 的信令技术演变

通信信令技术演进&#xff1a;从 PAM-2 到 PAM-4 在当今数字化高速发展的时代&#xff0c;数据传输需求呈爆炸式增长&#xff0c;行业对通信带宽的要求愈发严苛。为顺应这一趋势&#xff0c;通信信令技术不断革新&#xff0c;曾经占据主导地位的不归零&#xff08;NRZ&#xff…

(3)Playwright自动化-3-离线搭建playwright环境

1.简介 如果是在公司局域网办公&#xff0c;或者公司为了安全对网络管控比较严格这种情况下如何搭建环境&#xff0c;我们简单来看看 &#xff08;第一种情况及解决办法&#xff1a;带要搭建环境的电脑到有网的地方在线安装即可。 &#xff08;第二种情况及解决办法&#xf…

调用蓝耘Maas平台大模型API打造个人AI助理实战

目录 前言需求分析与环境配置明确需求环境准备选择合适的大模型 蓝耘Mass平台介绍API调用大模型API介绍API 调用流程 可交互AI助理开发总结 前言 大数据时代&#xff0c;个人隐私很难得到保障&#xff0c;如果我们需要借助大模型解决一些私人问题&#xff0c;又不想隐私被泄露…

智联未来:低空产业与AI新纪元-(下)

1. 隐形战场&#xff1a;全球规则制定权争夺战 低空经济的崛起&#xff0c;本质是数字主权的争夺战。当美国FAA将无人机适航认证周期延长至36个月&#xff0c;欧盟推出"天空云图"计划整合全境飞行数据时&#xff0c;中国正以制度创新构建自己的规则体系。 1.1 空域…

关于销售的几点注意事项

一、把客户当朋友聊 做买卖这事儿啊&#xff0c;说白了就是人和人打交道。您要是见着客户就背产品说明书&#xff0c;人家扭头就走。得学会听对方说话&#xff0c;琢磨他到底想要啥。就像您去菜市场买菜&#xff0c;摊主要是光说"这菜新鲜"&#xff0c;您可能没感觉…

C++语法系列之右值

前言 本来是想在C11里写这篇文章的&#xff0c;发现东西很多&#xff0c;就单独列一篇文章了&#xff0c; 右值这个概念是在C11中提出来的&#xff0c;以前只有左值和左值引用的概念&#xff0c;C11后提出了右值和右值引用&#xff0c;为什么要提出右值和右值引用&#xff1f;…

day17 常见聚类算法

目录 准备操作 聚类评估指标介绍 1.轮廓系数&#xff08;Sihouette Score&#xff09; 2.CH指数&#xff08;Calinski-Harabasz Index&#xff09; 3.DB指数&#xff08;Davies-Bounldin Index&#xff09; KMeans聚类 算法原理 确定簇数的方法&#xff1a;肘部法 KMeans算法的…

LCS 问题解释

最长公共子序列问题&#xff08;Longest Common Subsequence&#xff09;&#xff0c;该问题可以表述为&#xff0c;在 A , B A,B A,B 中找出一段子序列 x x x&#xff0c;使得 x x x 既是 A A A 的子序列&#xff0c;又是 B B B 的子序列。 你可以理解为&#xff0c;在两…

Windows最快速打开各项系统设置大全

目录 一、应用背景 二、设置项打开方法 2.1 方法一界面查找&#xff08;最慢&#xff09; 2.2 方法二cmd命令&#xff08;慢&#xff09; 2.3 方法三快捷键&#xff08;快&#xff09; 2.4 方法四搜索栏&#xff08;快&#xff09; 2.5 方法五任务栏&#xff08;最快&am…

OTSU算法原理与Python实现:图像二值化的自动阈值分割

1 引言 图像二值化是计算机视觉中的基础操作&#xff0c;它将灰度图像转换为黑白图像&#xff0c;常用于文档扫描、目标检测等任务。OTSU算法&#xff08;大津法&#xff09;是一种自动确定二值化阈值的算法&#xff0c;无需人工干预&#xff0c;通过最大化类间方差来分离前景和…

python:批量创建文件

#需求&#xff1a;在指定路径下批量创建3000#可以先弄个10个文本文件&#xff0c;文件格式为序号——物资类别——用户识别码组成 #1.序号从0001到3000 #2.物资类别包括&#xff1a;水果&#xff0c;烟酒&#xff0c;粮油&#xff0c;肉蛋&#xff0c;蔬菜 #3.用户识别码为9位的…