什么是红黑树?用一组数据来介绍一下红黑树

news2025/1/16 7:48:00

上篇博客,我们使用代码完成了一个简单的红黑树功能,这篇,我补充一下,关于红黑树的相关知识点。

红黑树概述

红黑树是一种自平衡的二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红色或黑色。红黑树具有以下特性

  1. 每个节点要么是红色,要么是黑色。
  2. 根节点是黑色。
  3. 每个叶节点(NIL节点,空节点)是黑色。
  4. 如果一个节点是红色,则它的子节点必须是黑色(也就是不存在两个相邻的红色节点)。
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点,这个数目被称为黑色高度。

由于红黑树满足上述性质,它能够保持树的平衡,确保在最坏情况下的查找、插入和删除操作的时间复杂度为O(log n)。红黑树常被用于实现关联数组等数据结构,以及在各种编程语言的标准库中被广泛应用。

使用一组数据来展示红黑树原理

上面说的只是概念,下面咱们举例说明:

当我们向红黑树中插入一组数据时,红黑树会根据插入顺序进行自平衡操作,确保树的结构符合红黑树的性质。假设我们有以下一组数据:{7, 3, 18, 10, 22, 8, 11, 26},我们将按顺序将它们插入到红黑树中。初始时,红黑树为空。
R:红
B: 黑

  1. 插入7:根节点为黑色,红黑树如下所示(红色节点用R表示,黑色节点用B表示):
   7(B)
  1. 插入3:着色为红色,不需要调整。
   7(B)
   /
 3(R)
  1. 插入18:着色为红色,不需要调整。
   7(B)
   / \
 3(R) 18(R)
  1. 插入10:进行左旋转,然后重新着色。
   7(B)         
   / \        
 3(R) 18(R)
       /  
     10(R)

  1. 插入22:着色为红色,不需要调整。
    7(B)
    /   \
  3(R)  18(R)
         /  \ 
     10(R)  22(R)
  1. 插入8:进行右旋转,然后重新着色。(不想像上面那样搞代码,烦死了)
    在这里插入图片描述

  2. 插入11:着色为红色,需要调整,因为18和11都是红色。
    在这里插入图片描述

  3. 插入26:着色为红色,需要调整,因为22和26都是红色。
    在这里插入图片描述

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

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

相关文章

信息安全与阿里云等保三级方案实践总结

信息安全在当今数字化时代变得至关重要,企业和组织需要采取有效措施来保护其数据和信息资产。阿里云作为中国领先的云服务提供商,提供了等保三级方案,帮助用户满足国家信息安全等级保护的要求。本文将探讨信息安全和阿里云等保三级方案的重要…

多媒体信息处理-重点知识-3. Feature Indexing and Retrieval

Chap 3. Feature Indexing and Retrieval 什么是索引? 为了提高数据集的检索效率而生成的结构化信息 基于特征的相似度匹配是多媒体数据检索方法的基础 从多媒体对象中提取重要特征,将其转化成高维特征向量存储在数据库中 相似性度量: 两种…

数据库|基于TiDB Binlog架构的主备集群切换操作手册

目录 一、具体操作过程 //1、停业务,待drainer追平主、备库数据 //2、使用sync-diff-inspector校验主从库数据是否一致 //3、关停主库到灾备库drainer同步链路后记录当前drainer同步TSO //4、使用dumpling/BR对灾备库进行数据全量备份(备份期间可继…

leetcode——异或运算—— 只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入&#xff…

【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection

sqli-labs-master 21-37 Advanced-Injection 第一关到第二十关请见专栏 文章目录 sqli-labs-master 21-37 Advanced-Injection第二十一关-Cookie注入第二十二关-Cookie注入第二十三关-注释符过滤的报错注入第二十四关-二次注入第二十五关-过滤OR、AND双写绕过第二十五a关-过滤…

关于 Runes 协议及「公开铭刻」发行机制的拓展讨论

撰文:MiX 编辑:Faust,极客 web3 2024 年 3 月 2 日,Runes 生态基础设施项目 Rune alpha 的创始人,在 Github 的公开议题中,与 Runes 协议创始人 Casey 展开了讨论,双方对如何拓展 Runes 协议的…

【QT】事件分发器/事件过滤器/事件处理的介绍和使用

事件分发函数 event() 事件分发器:返回值 bool 如果返回时true,代表用户要处理事件,不再分发事件了。 事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事…

PS在图片上直线、虚线、曲线

使用钢笔工具和直线工具都可以画直线,

script的defer和async的理解

场景一 js阻碍了dom元素的渲染 场景二 加了defer,结果跟场景一一样,所以defer对script标签内的代码不期待延迟执行的作用 场景三 script标签没有defer属性,不敢是不是通过src引入代码,结果一样 场景四 加了defer,获…

搭建的svn 1.14.1,拉取代码时候没输入账户密码就报错 auth failed

这边在ubuntu里面搭的svn server,但是拉代码的是否一直报错 auth faield,一开始以为是有auth cache,去设置里面清楚了,windows 里面也清楚了,但是还是报错 问题原因 一直排查才发现,我新增用户的时候&…

SpringBoot中的异常处理器

我们在以上的开发中,统一使用Result返回固定的数据格式给到前端,但是由于程序可能会出现BUG等问题,会导致最终返回给前端的数据,在异常情况下就又不统一了 为了实现在异常情况出现时,也能正常给前端返回统一的数据格式,我们需要使用 异常处理器 定义异常处理器需要使用RestCo…

Mac系统:mysql+jdk+neo4j

mysql 指令 //启动MySQL服务 sudo /usr/local/mysql/support-files/mysql.server start//停止MySQL服务 sudo /usr/local/mysql/support-files/mysql.server stop //连接MySQL数据库,在进行这一步前要先关掉服务 mysql -u root -p //检查MySQL服务状态 sudo /us…

【Unity】ABB CRB 15000 外部引导运动

一、RobotStudio控制器的文件系统和配置参数 HOME:控制器文件系统的根目录或起始点。配置:机器人控制器的配置设置和参数。外件信息:连接到机器人的外部组件的信息。I/O 系统:输入/输出系统,管理机器人和外部设备之间的…

基于dashscope在线调用千问大模型

前言 dashscope是阿里云大模型服务平台——灵积提供的在线API组件。基于它,无需本地加载大模型,通过在线方式访问云端大模型来完成对话。 申请API key 老规矩:要想访问各家云端大模型,需要先申请API key。 对于阿里云&#x…

uniapp图片涂鸦插件(支持多种涂鸦方式,图片放大缩小)

工程地址https://gitee.com/geshijia/ct-graffiti ct-graffiti涂鸦组件使用说明 参考说明 参考链接:https://github.com/ylyuanlu/yl-graffiti 感谢作者的付出,给我提供了一些思路,并做了如下优化: 增加图片放大缩小移动功能添…

UML简述(项目立项、设计、需求整理必备)

UML目录 前言1、UML概述1.1、基本概念1.2、UML图类型说明1.3、UML的41视图 2、UML图详细图示2.1、类图2.2、对象图2.3、组件图2.4、部署图2.5、包图2.6、用例图2.7、状态图2.8、活动图2.9、时序图2.10、通信图(协作图)2.11、定时图(计时图&am…

08 |「Fragment 」

前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、简介1、是什么2、为什么要有 Fragment3. Fragment 详细解释 二、Fragment 与 Activity 的直观理解三、Fragment 的创建1、Fragment 的创建方式2、Fragment 的增删替查1) 替换(常见&…

哪个牌子宠物空气净化器好?质量好的宠物空气净化器推荐

即使我们很爱自家的宠物,但我们也无法否认处理房间里飘荡的宠物毛发和皮屑,以及那些令人不快的气味(比如地毯上的意外和垃圾桶里的气味)的挑战。对于过敏患者来说,这几乎是无法忍受的。寻找有效的方法来减少这些问题对…

电子邮件怎么发送?如何发送匿名电子邮件?

电子邮件发送的详细步骤?电子邮件的发送方式有哪些? 掌握如何发送电子邮件,尤其是如何发送匿名电子邮件,对于保护个人隐私、进行安全交流具有重要意义。下面,AokSend就来详细探讨一下电子邮件的发送方法以及如何发送匿…

转录组总结

1. 软件安装 2.转录组分析步骤: ① 建立环境 #建立python2.7的环境,大部分的转录组信息都需要在Python2的环境下进行 conda create -n py2env python2.7 source activate py2env ② 获取fastqc报告 #单个报告 fastqc -t 15 /home/yinwen/biosoft/DN…