详解红黑树

红黑树规则

  1. 节点是红色或黑色。
  2. 根节点是黑色。
  3. 每个叶子节点都是黑色的空节点(NIL节点)。
  4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

红黑树从根节点到叶子节点的路径不会超过最短路径的2倍。

红黑树并不是完美平衡二叉树,它主要保证每个节点到叶子节点的路径都包含相同数量的黑节点。

也因此需要把其中一些节点变色为红节点,否则,节点全部是黑色不就行了???

红黑树变换

红黑树保持平衡主要靠三个操作:

  • 左旋:以某个节点作为支点(旋转节点),其右子节点变为旋转节点的父节点,右子节点的左子节点变为旋转节点的右子节点,左子节点保持不变。
  • 右旋:以某个节点作为支点(旋转节点),其左子节点变为旋转节点的父节点,左子节点的右子节点变为旋转节点的左子节点,右子节点保持不变。
  • 变色:节点的颜色由红变黑或由黑变红。

插入

插入操作包括两部分工作:一查找插入的位置;二插入后自平衡。

红黑树为空树

直接把插入节点作为根节点就行,根据规则二,设置为黑节点。

插入节点的Key已存在

插入前已经平衡,所以需要做的替代。设置为对应节点的颜色并更新值。

插入节点的父节点为黑节点

直接插入,并设置为红色。

插入节点的父节点为红节点

根据红黑树的性质2:根结点是黑色。如果插入的父结点为红结点,那么该父结点不可能为根结点,所以插入结点总是存在祖父结点。这点很重要,因为后续的旋转操作肯定需要祖父结点的参与。

然后可根据下列子场景操作:

叔叔结点存在并且为红结点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/27184.shtml

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

相关文章

【Shopee】计算虾皮订单的各项支出和订单收入计算方法

虾皮订单成交截图 基础条件: 商品金额:11.92 [4x2.98] 商品原价:7.5 商品折后价:2.98 商品数量:4 优惠券与回扣: 店铺优惠券(减10%):1.2 [11.92x10% 四舍五入了] 订单实…

微软bing英文地图公司地址标注

实现效果如下&#xff1a; 通过微软Bing地图嵌入代码&#xff0c;以在网站中展示公司地址&#xff0c;使用鼠标滚动可缩放或点击拖动地图。 直接上代码&#xff0c;根据自己的需求修改相关信息即可。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN…

消息群发工具制作的过程和需要用到的源代码!

在信息化快速发展的今天&#xff0c;消息群发工具因其高效、便捷的特点&#xff0c;在各个领域得到了广泛的应用&#xff0c;无论是企业营销、社交互动&#xff0c;还是日常通知&#xff0c;消息群发工具都发挥着不可替代的作用。 本文将详细介绍消息群发工具的制作过程&#…

opencv_核心操作

图像基本操作 访问和修改像素值 import numpy as np import cv2 img cv2.imread(c:/Users/HP/Downloads/basketball.png) h,w,c img.shape #图像大小 print(h,w,c)### 841 1494 3# 通过行和列坐标访问像素值 img[100,100]### 231 ### array([231, 140, 146], dtypeuint8)# …

额定值高于 1 kW 的电机驱动应用使用 GaN 逆变器 IC

GaN 技术的三个重要的参数是更高的带隙、临界场和电子迁移率。当这些参数结合起来时&#xff0c;由于 GaN 晶体的临界场高 10 倍&#xff0c;因此与硅 MOSFET 相比&#xff0c;电端子之间的距离可以近 10 倍。这导致了 GaN 和硅之间的明显区别&#xff1a;中压 GaN 器件可以基于…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(初步实践)

系列篇章&#x1f4a5; No.文章1AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之知乎网站数据获…

list容器的基本使用

目录 前言一&#xff0c;list的介绍二&#xff0c;list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插&#xff0c;头删&#xff0c;尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 前言 list中的接口比较多&#xff0c;与string和vector类似&am…

【javaScript数组,函数】的基础知识点

【javaScript数组&#xff0c;函数】基础知识点 1.关于JavaScript2.数组3.函数 &#x1f4cd;&#x1f4cd;&#x1f4cd;&#x1f4cd;&#x1f4cd;&#x1f4cd;&#x1f4cd;&#x1fae1;&#x1fae1;&#x1fae1;&#x1fae1;&#x1fae1;&#x1fae1; 本文主要讲解…

【数据库设计】宠物商店管理系统

目录 &#x1f30a;1 问题的提出 &#x1f30a;2 需求分析 &#x1f30d;2.1 系统目的 &#x1f30d;2.2 用户需求 &#x1f33b;2.2.1 我国宠物行业作为新兴市场&#xff0c;潜力巨大 &#x1f33b;2.2.2 我国宠物产品消费规模逐年增大 &#x1f33b;2.2.3 我国宠物主选…

SCSS 和 Sass的区别?

SCSS 和 Sass 都是 CSS 的预处理器&#xff0c;它们的主要区别在于语法风格和一些具体的语法特性。 以下是 SCSS 和 Sass 的详细对比&#xff1a; 1. 语法风格 SCSS (Sassy CSS) SCSS 是 Sass 的一种语法&#xff0c;是 CSS 的超集&#xff0c;完全兼容所有的 CSS 语法。 使用…

GPT办公与科研应用、论文撰写、数据分析、机器学习、深度学习及AI绘图高级应用

原文链接&#xff1a;GPT办公与科研应用、论文撰写、数据分析、机器学习、深度学习及AI绘图高级应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606667&idx3&sn2c5be84dfcd62d748f77b10a731d809d&chksmfa82606ccdf5e97ad1a2a86662c75794033d8e2e…

Http协议:Http缓存

文章目录 Cookie和Session缓存有效性检查整体流程总结Cookie和Session Cookie 客户端的缓存 Session 服务端的缓存,存储服务器与客户端一次会话的过程中的数据/资源 两者区别 是服务端与客户端的不同需求造成的 有效期 Cookie的有效期很长,Session的较短 原因:服务…

数据结构-树的性质

树的定义 树是一个有限数据元素的集合&#xff0c;当数据的量为0时&#xff0c;称为空树。 在一个非空树T中&#xff0c;最上方的结点没有前驱结点&#xff0c;称为根节点。在一个数据量大于1的树中&#xff0c;除了根节点之外的其余数据元素可以被分为m个互不相交的集合T1,T2,…

[leetcode]删除链表中倒数第k个结点

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* trainningPlan(ListNode* head, int cnt) {int n 0;ListNode* node nullptr;for (node head; node; node node->next) {n;}for (node head; n > cnt; n--) {node node->next;}retu…

场外期权如何开户?开户有哪些流程?

今天带你了解场外期权如何开户&#xff1f;开户有哪些流程&#xff1f;场外期权是一种金融衍生品&#xff0c;其开户流程和条件对于投资者来说至关重要。 场外期权如何开户&#xff1f; 需要满足532资质&#xff0c;参与者需为法人、合伙企业或其他组织&#xff0c;最近一年末…

《吸血鬼猎人D》观后感

前言 在B站无意中发现了一部动漫电影《吸血鬼猎人D》&#xff0c;看着封面还不错&#xff0c;就试着点开了视频&#xff0c;看了一会儿&#xff0c;发现画面很精美&#xff0c;人物造型高大威猛&#xff0c;肌肉线条清晰可见。如果我没记错的话&#xff0c;这种风格在日本动漫中…

填报志愿选大学专业,文科生如何选专业?

读文科的同学接触的专业知识相对广泛&#xff0c;往往被认为是“万金油”&#xff0c;他们仿佛什么都能做&#xff0c;但是和专业技能类知识不同&#xff0c;缺乏技术支持&#xff0c;从而使得文科专业的就业方向和前景远远比不上理科专业那么明朗&#xff0c;对于众多文科生而…

Unity基于EventSystem让SpriteRenderer支持点击事件

若2D场景中使用了UGUI的UI系统&#xff0c;则默认是有EventSystem的。否则可以创建个UGUI的物体&#xff0c;然后保留EventSystem&#xff0c;删除其它不需要的。 场景主相机添加Physics2DRaycaster组件&#xff0c;并妥善设置其EventMask属性。 为SpriteRenderer物体添加诸如…

(5)按钮输入

文章目录 前言 1 基础设置 2 数字逻辑/模拟电压设置 3 PWM输入设置 4 额外设置 前言 连接到自动驾驶仪的最多四个外部按钮或开关可以被配置为触发辅助功能(Auxiliary Functions)&#xff0c;类似于 RC 通道开关的触发方式。这些按钮输入可以被配置为使用数字逻辑电平电压…

U-Mail反垃圾邮件网关助力企业抵御垃圾邮件,守护邮箱安全

在数字化时代&#xff0c;电子邮件已成为企业沟通不可或缺的工具&#xff0c;它在促进信息流通和提高工作效率方面扮演着关键角色。然而&#xff0c;随着电子邮件使用的普及&#xff0c;垃圾邮件问题也日益凸显&#xff0c;特别是那些携带恶意软件或钓鱼链接的邮件&#xff0c;…