到底什么是红黑树?

article/2025/4/24 16:21:06

到底什么是红黑树?

首先,可以这么简单粗暴的理解,红黑树≈平衡的二叉排序树。
那么很显然,要想弄懂红黑树,得先明白什么是树、二叉树、二叉排序树、平衡树以及不平衡树。下面我们一个个来了解。

1.第一个问题,什么是树?
树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。(如下图所示)
它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。节点里面可以存储数据,文件等,下图的节点为空,没有存放东西,仅做举例子。
在这里插入图片描述

2.第二个问题,什么是二叉树?
二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。如下图所示在这里插入图片描述

3.第三个问题,什么是排序二叉树?
二叉树指的是一棵树,只有两个孩子,两个分叉,而进一步地,排序二叉树就这棵树的左子树比右子树都要小,就叫排序二叉树。
在这里插入图片描述

4.第四个问题,什么是平衡树?什么是不平衡树?
下面的两张图,可以让大家非常直观的观察到,平衡树与不平衡树之间的差别了。

在这里插入图片描述
在这里插入图片描述
5.那么红黑树是用来干什么的呢?
当向二叉排序树插入元素或者删除元素的时候,导致排序二叉树变得不平衡了,这时候就需要红黑树来解决这个问题来让这棵树变得平衡了。而红黑树正是解决这个不平衡问题而诞生的。

6.那么有的朋友又会问,为什么要解决这个不平衡的问题呢?

这是因为啊,之所以需要二叉排序树,是因为他这里利用了折半查找(也叫二分查找)的思想,所以利用这种数据结构进行查找的时候,查找的速度会非常的快速,如下图所示。在一个存储4,5,6,10,14,15,18的树形结构里面,假设我们要查找14,我们只要先找到10,再找到15,最后就可以找到14,一共只需要查找3次,就可以找到目标节点,假若是按照顺序查找从左到右顺序则要找5次,明显是前者的查找方式比较快。另外,由于这只是比较简短的数据,如果是更大量的数据,则前者的查找方式将会显得更加的快速。
在这里插入图片描述
那么现在,回到我们上面的问题,为什么要解决这个不平衡的问题呢?这是因为当二叉排序树不平衡的时候,查找的速度会非常的慢,例如下图一棵不平衡的树所示。当我们如果一棵树的一边及其的不平衡,并且不平衡得像一个线性结构一样(例如下图),下图的左子树几乎变成了线性结构,相当于改变了它原本的树形结构。如此一来,这时候很明显会大幅降低查找速度,所以这时候就需要红黑树根据一定的规则来把不平衡的树变得平衡,从而保持查找的高速度。
在这里插入图片描述

7.说了这么久,那到底什么是红黑树呢?
回到本文第一句话,可以这么简单粗暴的理解,红黑树是一种自平衡的二叉排序树。
红黑树具有下面5个规则,符合这5个规则的二叉排序树就是红黑树:
规则一: 所有节点非黑即红,没有其他的颜色
规则二: 根节点都为黑色
规则三: 叶子节点(即空节点)都为黑色
规则三: 每个红色节点的两个子节点都是黑色。
规则四: 从任一节点到其每个叶子的所有路径都包含“相同数目的黑色节点”

举个例子,红黑树如下图所示。
在这里插入图片描述
之所以要设置以上几条规则,是为了防止红黑树退化成一条单链表,影响查询效率。Java在JDK1.8中为了防止哈希冲突形成的长单链表,就把单链表转换成红黑树的数据结构,以提升查询的效率。
8.那么如何把一棵不平衡的数,变成红黑树呢?
主要是有两个方法:
1.变色
2.旋转(包括左旋转和右旋转)
(一般来说,先变色,看下符不符合规则,变到没法再变色了,就旋转,旋转看下规则的要求是否需要变色)
红黑树漫画讲得很好


http://chatgpt.dhexx.cn/article/7vNh3agr.shtml

相关文章

面试常问:什么是红黑树?

什么是红黑树? ———————————— 二叉查找树(BST)具备什么特性呢? 1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。 下图…

红黑树简介

一、什么是红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symme…

什么是红黑树?

一、红黑树的产生 1.二叉树 定义:二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的&…

说说什么是红黑树?

分析&回答 红黑树介绍 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,红黑树就是一种平衡的二叉查找树,说他平衡的意思是他不会变成“瘸子”,左腿特别长或者右腿特别长。除了符合二叉查找树的特性之外&#xf…

漫画:什么是红黑树?(整合版)

前段时间,小灰发布了红黑树相关的文章,分成上下篇来讲解。 这一次,小灰把两篇文章做了整合,并且修正了红黑树删除部分的图片错误,感谢大家的指正。 ————— 第二天 ————— ———————————— 二叉查找…

抗性基因数据库CARD介绍

随着抗生素药物的发现及使用,越来越多的耐药菌株由此产生。而耐药菌株的发展则会增加疾病治疗的难度和成本,因此耐药微生物的研究则显得尤为重要。目前,通过对耐药基因的鉴定挖掘能够一定程度上帮助我们揭开耐药机制,为疾病的治疗…

关于 GIL

目录 GIL是什么GIL产生的原因如何避免受到GIL的影响什么时候会释放GIL锁互斥锁和Gil锁的关系 参考链接 python中的GIL详解 python面试不得不知道的点——GIL 《Python面试每日一题》之GIL Python GIL 是功能和性能之间权衡后的产物,它尤其存在的合理性&#xff0…

gin介绍

Gin的介绍与应用 Gin是一个golang的web框架,Gin像是一些常用函数或者工具的集合。具有快速灵活,容错方便等特点。Gin自身的net/http足够简单,性能也非常不错。 Gin的官网:https://github.com/gin-gonic/gin 安装前保证git和go都安…

gin_gorm

一、使用形式 1、引入gorm包 import "github.com/jinzhu/gorm" 2、导入数据库驱动 import _ "github.com/go-sql-driver/mysql"为了方便记住导入路径,GORM包装了一些驱动: import _ "github.com/jinzhu/gorm/dialects/mysq…

【GIC】配置GIC

本章介绍如何在裸机环境中启用和配置兼容GICv3的中断控制器。 目录 一、全局设置 二、单独PE设置 2.1 Redistributor配置 2.2 CPU接口配置 2.3 PE配置 三、SPI, PPI, SGI配置 3.1设置SPI的目标PE 附:寄存器介绍 附1:GICD_CTLR 附2:…

大寰AG-95夹爪指尖更换、结构示意图及通讯协议转换器说明

注意: 在对手爪进行任何操作之前,请先关闭机器人和夹持电源。 大寰AG-95夹爪指尖更换更换步骤: 1. 使用 M3 内六角螺丝刀卸下指尖螺丝,拆卸磨损的指尖。 2. 清洁手指件并彻底擦干。 3. 取出指尖上φ3x6 mm 定位销。 4. 将…

使用Landsat系列数据来检测喜马拉雅地区的冰湖溃决(Georg Veha等人,RSE,2018)

一、背景 这是一篇做冰湖溃决的文章,作者主要使用了random forest来检测喜马拉雅地区的冰湖溃决现象,这项成果发表在了Remote Sensing of Environment上。 文献连接:https://doi.org/10.1016/j.rse.2017.12.025 文献引用:Georg Ve…

App设计灵感之十二组精美的智能家居App设计案例

通过手机远程启动家里的各种家用电器,让我们回到家后可以享受到舒适的环境,这便是智能家居给我们带来的便利。 ① Smart Hub Application design by Ariuka ② Smart Home by Srgi Mi ③ Smart Home Mobile App by Ghulam Rasool ④ Smart Home Mobile …

基恩士KV8000通过HT3S-EIS-MDN网关与大寰机器人交换数据

一、概述 本文主要介绍使用HI-TOP网关 HT3S-EIS-MDN在基恩士KV8000 PLC和大寰RGI系列旋转抓手之间进行数据交换。 解决的问题:基恩士PLC KV8000监控和大寰RGI系列旋转抓手。 解决方法:使用HI-TOP网关 HT3S-EIS-MDN。基恩士KV8000支持EthterNet/IP协议…

CARD耐药数据库Linux使用

一、背景 关于耐药性有很多数据库可以使用,但是CARD的优势在于数据库较为准确,只有经过文章进行验证后的基因才会被记录 二、软件链接 软件github: GitHub - arpcard/rgi: Resistance Gene Identifier (RGI). Software to predict resistomes from p…

(原创)用红黄蓝RYB色相环(伊登色相环)代替RGB(RGI/RGV)色相环

作者:❄️固态二氧化碳❄️ (主页) 链接:(原创)用红黄蓝RYB色相环(伊登色相环)代替RGB(RGI/RGV)色相环 - 固态二氧化碳的博客 - CSDN博客 来源:CSDN博客 发表时间:2019年05月28日 12:33:57 著作权归作者所有。商业转载请联系作者获…

APT、ET、RGI、ICQ

越来越大的屏幕尺寸和越来越多的需要显示屏常亮应用,要求手机厂商必须从各个方向考虑来提升电池续航时间。一般而言,手机上常用的有两种 PA 的省电技术,一种是平均功率跟踪技术(APT),另外一种是包络跟踪&am…

十、ABP

一、官网 安装 安装成功Core 2.2版本的 转载于:https://www.cnblogs.com/fger/p/10641811.html

abp Step1

refs: 1)下载模板后用vs2017打开 2)Web项目设置为起始项目 3)在包管理终端下选择EntityFramework为默认项目,运行"Update-Database",创建数据库 4)运行项目,默认用户admin密码123qwe