news 2026/4/16 9:09:51

红黑树的插入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
红黑树的插入

目录

gitee对应仓库

红黑树的概念

红黑树的规则

红黑树如何保证最长路径不超过最短路径的2倍?

红黑树的效率分析O(logN)

红黑树的节点

插入

左右判别:

仅变色

旋转

旋转过程

单旋+变色

↓子树推断(在原本的c为黑色的情况下)

变色推断

双旋+变色

额外NIL节点

gitee对应仓库

红黑树的概念

红黑树是一棵二叉搜索树,每个节点增加一个存储位来表示节点颜色,可以是红色或者黑色。通过对任何一条根到叶子的路径上各个节点的颜色进行约束,红黑树确保没有一条路径比其他路径长度过于两倍。

红黑树的规则

1.每个节点不是红色就是黑色
2.根节点是黑色的
3.如果一个节点是红色的,则它的两个节点必须的黑色的。也就是说任意一条路径不会有连续的红色节点。
4.从任一根节点节点到其所有null节点的黑色节点个数相等。

红黑树如何保证最长路径不超过最短路径的2倍?

引入b:根节点到nullptr的黑色节点个数。

极端情况:
最长:黑红间隔分布长度2b。
最短:全为黑色长度为b。

所以最长路径不超过最短路径的2倍。

红黑树的效率分析O(logN)

假设N为节点个数,h为最短路径的长度,那么2^h - 1 <= N <= 2^(2*h) - 1
完全二叉树 完全二叉树
取对数得h ≈ logN N个节点即最多查找次数为2logN次 O(logN)

红黑树的节点

enum Colour { RED, BLACK }; // 这里我们默认按key/value结构实现 template<class K, class V> struct RBTreeNode { // 这里更新控制平衡也要加入parent指针 std::pair<K, V> _kv; RBTreeNode<K, V>* _left; RBTreeNode<K, V>* _right; RBTreeNode<K, V>* _parent; Colour _col; RBTreeNode(const std::pair<K, V>& kv) :_kv(kv) , _left(nullptr) , _right(nullptr) , _parent(nullptr) { } };

插入

1.插入一个值按二叉搜索树的规则进行插入,插入后我们只需要观察是否符合红黑树的四条规则。
2.如果是非空树擦入,新增节点必须是红色。如果是空树插入,新增节点是黑色节点。
※3.非空树插入后如果父节点是黑色则插入完成。
※4.明显继续探究的前提是插入后f是红色的情况,则g节点必须为黑色(原树无连续红色)又有c为红色所以其三者的的颜色已经确定。 因此我们进行"变色、旋转的依据主要是u的存在与否和颜色"。

因此进入插入循环的条件是:while (parent && parent->_col == RED)

左右判别:

参考对象为u与p的相对位置 // p的位置下为c
决定因素是parent == grandfa->left。 ucl为后定义因素

仅变色

ucl存在且为红

无论x的来源是什么

g变红 p u变黑

c = g p = c->parent 继续向上更新

旋转

单旋+变色 u不存在 或 u存在为黑
c是新插入的 c是更新得来的
若c不是新插入的则是更新来的 不满足p为红的事实 为什么?c只有两种途径形成 若c是新增来的那么新增前

不符合规则

旋转过程

单旋+变色

g作单旋点

↓子树推断(在原本的c为黑色的情况下)

假设a为hb 则b为hb
d为hb+1
e、f为hb

变色推断

//err g不能为红 因为为红p必定为红出现连续红 所以g为黑
①p变为黑 承接上与下
②g变为红

双旋+变色

双旋+变色 u不存在 或 u存在为黑
c是新插入的 c是更新得来的
若c不是新插入的则是更新来的 不满足p为红的事实 为什么?c只有两种途径形成 若c是新增来的那么新增前

不符合规则

g p c呈现折线型

额外NIL节点

部分书籍在红黑树的末端(nullptr)处补充一叫作NIL的外部节点该节点为黑色。 //作用于标记支路结束。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:08:25

猫抓Cat-Catch终极指南:5步快速掌握浏览器资源嗅探神器

猫抓Cat-Catch终极指南&#xff1a;5步快速掌握浏览器资源嗅探神器 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法保存网页上的精彩视频…

作者头像 李华
网站建设 2026/4/16 9:07:54

【Excel提效 No.003】一句话搞定按条件拆分Sheet页

目录处理效果1. 前置准备2. 你是不是也遇到这些问题&#xff1f;3. 超简单AI自动化解决方案第1步&#xff1a;准备好你的原始数据第2步&#xff1a;针对指定的文件下达指令第3步&#xff1a;验收还能解决这些同类问题指令为什么这么有用&#xff1f;更多场景直接抄作业常见问题…

作者头像 李华
网站建设 2026/4/16 9:07:50

税务系统新型验证码攻防实战:从混淆加密到轨迹模拟的逆向解析

1. 税务系统验证码升级背后的攻防逻辑 最近不少做税务系统的朋友应该都发现了&#xff0c;系统悄悄更新了三类验证码&#xff1a;还原验证码、旋转验证码和文字点选验证码。作为常年和验证码打交道的安全研究员&#xff0c;我第一时间就注意到了这个变化。简单来说&#xff0c;…

作者头像 李华
网站建设 2026/4/16 9:07:49

AutoGLM-Phone-9B部署避坑指南:2块4090显卡配置一次成功

AutoGLM-Phone-9B部署避坑指南&#xff1a;2块4090显卡配置一次成功 1. 准备工作与环境检查 在开始部署AutoGLM-Phone-9B之前&#xff0c;确保你的硬件和软件环境满足以下要求&#xff1a; 1.1 硬件配置要求 显卡&#xff1a;至少2块NVIDIA RTX 4090显卡&#xff08;每卡24…

作者头像 李华
网站建设 2026/4/16 9:05:38

ThinkPad散热控制革命:如何用TPFanCtrl2实现精准风扇管理

ThinkPad散热控制革命&#xff1a;如何用TPFanCtrl2实现精准风扇管理 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 TPFanCtrl2是一款专为ThinkPad笔记本电脑设计的智…

作者头像 李华
网站建设 2026/4/16 9:05:11

统计学核心工具解析 —— 三大抽样分布(卡方、t、F)的构建与应用

1. 从正态分布到三大抽样分布的演化之路 第一次接触统计学时&#xff0c;我盯着那些复杂的分布曲线直发懵。直到导师用了个简单的比喻&#xff1a;正态分布就像面包店里的标准法棍&#xff0c;而三大抽样分布则是根据不同需求改造的蒜香法棍、全麦法棍和芝士法棍。这个生活化的…

作者头像 李华