红黑树-插入节点的失衡调节
红黑树的本质依然是二叉搜索树认为不存在相同的节点。最近在学map、set二者的底层数据结构都是红黑树。所以复习一下红黑树。对于一颗红黑树插入节点的大致流程是插入新节点-判断当前状态是否失衡-失衡调节-插入完成。一颗红黑树需要满足以下基本条件只有红黑节点顾名思义根节点是黑节点黑同路树上每个节点到它的任意叶子节点黑色节点的数量相同红孤单红节点不允许连续路径长度从根节点到某个叶子节点的所有路径里不存在一条路径长度大于另一条路径的2倍关于黑同路其实就是在红黑树上任选2个点分别作为起点和终点那么两点之间的任何路径经过的黑色节点都是一样的。补充的黑色节点是可以连续的且一个节点的孩子可以一个是红、一个是黑。只是插入新节点之前还有两个问题需要澄清一下新节点插入到哪个地方插入的新节点选择什么颜色新节点插入在什么地方只要哪个节点的子节点没满那都可以插入。插入的新节点选什么颜色那就分类讨论一下插入的新节点是黑色根据红黑树的黑同路性质一颗正常、未失衡的红黑树必定满足黑同路也即——每个节点到任一叶子节点的路径黑节点相同。那么如果插入一个新的黑节点那必定会导致所有经过它的路径都多了1个黑节点破坏了性质就需要失衡调节。插入的新节点是红色如果新节点的父亲是黑色那么插入之后依然不会破坏红黑树的性质。总而言之一句话如果插入的是黑节点那么必定需要失衡调节如果插入的是红节点至少有时候可以不用调节。对于插入节点我们给与它相关的节点都取个名字方便后续表示。[这里要插一张图]curcurrent表示插入的新节点parparentcur节点的父节点uncunclecur节点的叔叔或者说是par节点的兄弟gragrandcur节点的爷爷也是par和unc的父节点根据插入节点的位置和颜色情况一共有3种分类方向每种分类有2个可能组合起来就是2×2×282 \times 2 \times 2 82×2×28种情况。3种分类方向是par节点在gra节点的左边还是右边左边是Lleft右边是Rrightcur节点在par节点的左边还是右边左边是L右边是Rcur节点的unc节点是红色还是黑色黑色是Bblack红色是RRed注空节点视作黑节点所以如果爷爷节点只有1个孩子那么cur节点的叔叔视作黑色接下来开始分类讨论如何失衡调节。大类1叔叔是红色XXR叔叔是红色那么一共就有如下情况LLR、LRR、RLR、RRRLLR来确认一下图中情况是否是LLRL父亲在爷爷的左边L自己在父亲的左边R叔叔的颜色是红色调节方式是父亲、叔叔染黑爷爷染红调节之后如图可判断是否满足红黑树的基本性质。看上去挺简单的那么把情况扩展成一般情况用相同方式调节之后可以发现爷爷gra和自己的父节点都是红色破坏了红黑树“红节点不能连续”的性质。对于这种情况就需要把爷爷视作cur相应的也就有了新的par、unc、gra。此时再次按照父亲、叔叔染黑爷爷染红的方式调节。如此不断往上调整。那什么时候调整结束呢当cur是根节点时红黑树平衡结束调整。或者当cur的父节点是黑色也结束调整。最后还得注意把根节点给涂黑。因为当cur是根节点的孙子时调节时会把爷爷gra给染红那不就是把根节点给染红了嘛。LRRL父亲在爷爷的左边R自己在父亲的右边R叔叔是红色调节父亲、叔叔染黑爷爷染红接着cur标签移到爷爷处以同样的方式进行失衡调节当cur的父亲是黑色或者自己本身是根节点时结束循环红黑树已平衡将根节点染黑RLRR父亲在爷爷的右边L自己在父亲的左边R叔叔是红色调节父亲、叔叔染黑爷爷染红cur移动到爷爷处继续失衡判断当cur父亲是黑色或者自己是根节点时结束循环将根节点染黑RRRR父亲在爷爷的右边R自己的爷爷的右边R叔叔是红色调节同上大类2叔叔是黑色XXB叔叔是黑色当我把四种情况都画出来后发现新插入节点的父亲是红色且没有兄弟空节点视为黑色。LLBL父亲在爷爷的左边L自己在父亲的左边B叔叔是黑色调节父黑爷红爷旋转父亲染黑爷爷染红爷爷右旋关于左右旋我的理解是类似以前的手机游戏《吃糖果》。节点右旋说明该节点位于其子节点右上角那么该节点就往右旋转”落下来“变成了自己子节点的右孩子。如果碰到了子节点的右孩子那就顶替它把那条连线撞上去。节点左旋该节点位于其子节点的左上角左旋就是它往左旋转”掉落“变成自己子节点的左孩子。碰到子节点原本的左孩子就顶替它。LRBRLBRRB

相关新闻

Wand-Enhancer:免费解锁WeMod专业版功能的终极本地增强方案

Wand-Enhancer:免费解锁WeMod专业版功能的终极本地增强方案

Wand-Enhancer:免费解锁WeMod专业版功能的终极本地增强方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在为WeMod专业版的高昂订…

2026/7/16 3:36:08阅读更多 →
生产级AWS EKS集群搭建五大核心支柱与实战检查清单

生产级AWS EKS集群搭建五大核心支柱与实战检查清单

1. 为什么生产环境的EKS集群搭建不能“照着教程点下一步”?“生产环境AWS EKS/K8s集群搭建全流程,看完这篇直接上手”——这个标题背后藏着一个被无数团队踩过坑的真相:EKS不是安装软件,而是构建一套可审计、可回滚、可演进的基础…

2026/7/16 3:36:08阅读更多 →
学ai 第二日python 复习夯实基础

学ai 第二日python 复习夯实基础

1. 字面量学习目标:1、掌握字面量的含义2、了解常见的字面量类型3、基于print语句完成各类字面的输出字面量:在代码中被固定下来的值。 常见的值类型: python中常用的六种值类型: 数字类型:整型(int&#x…

2026/7/16 3:31:07阅读更多 →
Visual C++实现灰度图像彩色化:从原理到桌面应用开发

Visual C++实现灰度图像彩色化:从原理到桌面应用开发

1. 项目概述与核心价值最近在整理一些老照片,看着那些泛黄的黑白影像,总想着如果能给它们添上色彩,那段尘封的记忆会不会更鲜活一些?这让我想起了在图像处理领域一个既经典又充满挑战的任务:灰度图像彩色化。你可能觉得…

2026/7/16 4:36:28阅读更多 →
告别官方插件:在VS Code中配置Arduino CLI进行高效开发

告别官方插件:在VS Code中配置Arduino CLI进行高效开发

1. 为什么需要告别官方Arduino插件?微软官方推出的VS Code Arduino扩展曾经是开发者的首选工具,但最近这个扩展已经进入维护模式,不再提供新功能更新。我在实际项目中发现,随着Arduino生态的发展,这个插件开始暴露出几…

2026/7/16 4:36:28阅读更多 →
ROFL-Player:永久保存和播放英雄联盟回放的终极解决方案

ROFL-Player:永久保存和播放英雄联盟回放的终极解决方案

ROFL-Player:永久保存和播放英雄联盟回放的终极解决方案 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为英雄联盟客户…

2026/7/16 4:36:28阅读更多 →
C++面向对象编程:从类与对象基础到封装、构造与this指针详解

C++面向对象编程:从类与对象基础到封装、构造与this指针详解

1. 从C到C:为什么我们需要“类”与“对象”?如果你是从C语言转过来的,或者刚开始接触C,可能会觉得“类”和“对象”这两个词有点玄乎。不就是把数据和函数打包在一起吗?C语言的结构体(struct)不…

2026/7/16 4:36:28阅读更多 →
考研数学二高等数学核心公式速查手册(应用场景与记忆技巧)

考研数学二高等数学核心公式速查手册(应用场景与记忆技巧)

1. 极限模块公式速查与实战技巧1.1 重要极限公式的快速记忆法考研数学二中最让人头疼的莫过于那堆长得差不多的极限公式。我当年备考时发现,用"三阶火箭"模型来记忆特别有效:第一阶是基础款lim(sinx/x)1,第二阶是升级版lim(11/x)^x…

2026/7/16 4:36:28阅读更多 →
【C++】类和对象--匿名对象

【C++】类和对象--匿名对象

目录匿名对象的语法与生命周期应用场景注意事项有时我们只需要临时调用某个类的成员函数一次,并不想为这个对象命名并维持其生命周期,这时可以使用匿名对象。 匿名对象的语法与生命周期 匿名对象就是定义时没有指定变量名的对象:ClassName(…

2026/7/16 4:31:28阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/15 6:42:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/15 6:12:45阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/15 10:54:00阅读更多 →
A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并

A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并

摘要:本文系统讲解如何利用Codex App的Review功能与GitHub PR工作流,实现从代码修改到安全合并的完整流程。涵盖Review面板深度使用、/review命令实战、GitHub Connector配置、PR描述撰写技巧,以及常见问题排查方法。通过多个实战案例和流程图,帮助开发者建立高效的AI辅助代…

2026/7/16 0:00:38阅读更多 →
遗传算法解5皇后问题:从Hello World到工业优化的进化实验室

遗传算法解5皇后问题:从Hello World到工业优化的进化实验室

1. 项目概述:为什么用遗传算法解5皇后问题,而不是直接回溯?我带过十几届算法课,也给不少初创团队做过AI架构咨询。每次讲到组合优化问题,学生和工程师的第一反应永远是“写个回溯试试”。这没错——55棋盘上找所有合法…

2026/7/16 0:00:38阅读更多 →
5.1V稳压管输出为何只有4.7V?工作电流与负载影响分析

5.1V稳压管输出为何只有4.7V?工作电流与负载影响分析

前几天调试一个简单的电源模块,用到了5.1V稳压管。电路接好,上电测试,万用表一量——输出居然只有4.7V。第一反应是稳压管坏了,换了一个新的,结果还是4.7V。这让我想起很多初学者都会遇到的困惑:明明标称5.…

2026/7/16 0:00:38阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/15 15:50:47阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/15 8:52:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/15 14:06:23阅读更多 →