图解红黑树原理

article/2025/11/3 15:43:58

 

 

一.红黑树的性质(一种自平衡的二叉查找树)

1. 根节点是黑色。

2. 节点是红色或黑色

3. 叶子节点都是黑色的空节点(NIL节点) 意思就是末尾一排是黑色空节点(可全部省略)

 (叶子节点意思是没有子节点的节点)

4. 红色节点不能相连 意思就是每个红色节点的两个子节点都是黑色,且可能出现连续黑色节点

5. 从任意节点出发,到其每个叶子节点(nil节点)的路径中包含相同数量的黑色节点

  (这个数值叫黑高度)

  (保证树每条分支的黑节点高度一样)

6. 新加入到红黑树的节点为红色节点

7. 从根节点到叶子节点的最长路径不大于最短路径的2倍

    ①最短路径:根节点到叶子节点只数黑色节点的数量

    ②最长路径:根节点到叶子节点,红色节点和黑色节点数量相同,即最长路径,也就是黑色节点(或红色节点)* 2

(注:一般需要红黑树自平衡是因为违反了了性质4和性质5)

 

二.红黑树的实例图

* 红黑树虽然是自平衡的二叉查找树,但是却不能完全保证红黑树绝对平衡

 1. 红黑树1

  

  2. 红黑树2

 

三. 红黑树的自平衡方式

方式1:变色 红变黑 黑变红(不能连续出现两个相邻的红色节点,否则就要变色)

 

方式2:旋转(左旋,右旋)

 

1. 左左节点旋转:以祖父节点【右旋】,搭配【变色】

①红黑树

②插入节点65后的自平衡

第一步:以插入节点65的祖父节点69进行右旋

第二步:为了符合红黑树性质5进行变色(注:66为根节点必须为黑色)

 

2. 左右节点旋转:先父节点【左旋】,然后祖父节点【右旋】,搭配【变色】

①红黑树

②插入节点67后的自平衡

第一步:以插入节点67的父节点66进行左旋

第二步:根据左左节点旋转规则进行后续自平衡

 

3. 右右节点旋转:以祖父节点【左旋】,搭配【变色】

①红黑树

②插入节点70后进行自平衡

第一步:以插入节点70的祖父节点66进行左旋

第二步:为了符合红黑树性质5进行变色(注:69为根节点必须为黑色)

 

4. 右左节点旋转:先父节点【右旋】,然后祖父节点【左旋】,搭配【变色】

①红黑树

②插入节点68后进行自平衡

第一步:以插入节点68的父节点69进行右旋

第二步:根据右右节点旋转规则进行后续自平衡

 

四. 红黑树插入

 

五. 红黑树删除

情况1:删除的是根节点,则直接将根节点置为null

情况2:待删除节点的左右子节点都为null,删除时将该节点置为null

情况3:待删除节点的左右子节点有一个有值,则用有值的节点替换该节点即可;

情况4:待删除节点的左右子节点都不为null,则找前驱或者后继(一般都是找后继节点),

             将前驱或者后继的值复制到该节点中,然后删除前驱或者后继

 

4.1 前驱为黑色节点,同时子节点都为null

4.2 前驱为黑色节点,并且有一个非null子节点

第一步:用前驱对待删除的节点进行赋值(用后驱节点也可以,这里以前驱节点为例)(待删除节点是64)

第二步:删除前驱节点并进行自平衡

4.3 前驱为红色节点,同时子节点都为null

 

 

六. 4道红黑树图解例题

第一题:

①红黑树

②向红黑树中插入节点66

③因为符合红黑树的性质,所以不用自平衡

 

第二题:

①红黑树

②插入节点51

③红黑树的自平衡

第一步:变色(出现了连续的两个节点是红色节点)

 注:这里变色时要时刻记得要满足红黑树性质5

第二步:变色后的树符合红黑树的性质,所以自平衡完成

 

第三题:

①红黑树

②插入节点65:符合插入的右左节点旋转

③红黑树的自平衡

第一步:以插入节点65的父节点66进行右旋

第二步:以66的祖父节点进行左旋

第三步:自平衡(变色达到自平衡)

 

第四题:

①红黑树

②插入节点6并进行自平衡

第一步:插入节点6

第二步:变色

第三步:左旋

第四步:右旋

第五步:变色

 

 


http://chatgpt.dhexx.cn/article/HyVKAVxs.shtml

相关文章

红黑树原理和算法详细介绍

目录 1 R-B Tree简介 2 红黑树的时间复杂度和相关证明 3 红黑树的基本操作 1. 左旋 2. 右旋 3. 添加 4.1 删除 1 R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储…

HashMap底层红黑树原理(超详细图解)+手写红黑树代码

在看完了小刘老师和黑马的源码视频之后,我整理了一篇HashMap的底层源码文章,学海无涯,这几天看了对红黑树的讲解,故将其整理出来 HashMap底层源码解析上 HashMap底层源码解析下 视频链接 小刘老师讲源码 传智播客-黑马程序员 文章目录 树结…

红黑树原理及java实现

红黑树 红黑树规则特点: 节点分为红色或者黑色;根节点必为黑色;叶子节点都为黑色,且为null;连接红色节点的两个子节点都为黑色(红黑树不会出现相邻的红色节点);从任意节点出发&…

红黑树原理及旋转

红黑树,本质上来说就是一棵二叉查找树 但它在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡 保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log n) 但它是如何保证一棵n个结点的红黑树的高度始终保持在h logn的呢?这就引出了红黑…

HashMap红黑树原理分析

近期学习了 HashMap 实现原理,这篇咱们了解一下红黑树的设计,相比 jdk1.7 的 HashMap 而言,jdk1.8最重要的就是引入了红黑树的设计,当hash表的单一链表长度超过 8 个的时候,链表结构就会转为红黑树结构。 01、故事的起…

HashMap源码学习:红黑树原理详解

文章导航 HashMap源码学习:红黑树原理详解 HashMap源码学习:JDK1.8版本源码解析 目录 文章导航前言概述红黑树的特性变色平衡右旋平衡左旋平衡 正文红黑树平衡方法:balanceInsertion红黑树左旋方法:rotateLeft红黑树右旋方法&…

红黑树原理讲解

红黑树原理讲解 一、红黑树的性质二、红黑树的3种变化策略?(为满足红黑树性质)1. 改变颜色2. 左旋3. 右旋 三、红黑树的插入情景1:红黑树为空树情景2:插入节点的key已经存在情景3:插入节点的父节点为黑色情…

红黑树原理详解

红黑树原理详解 红黑树的旋转红黑树上结点的插入红黑树上结点的删除 参考: 教你初步了解红黑树 红黑树(一)之 原理和算法详细介绍 红黑树定义: (1) 每个节点或者是黑色,或者是红色。 (2) 根节点是黑色。 (3) 每个叶子节点是黑色。 [注意&…

红黑树原理

因为看的时候写在了纸上,于是直接扫描的,效果不太好。

HashMap红黑树原理解析

HashMap红黑树原理解析 定义: 简单来说红黑树是一种近视平衡二叉查找树,主要优点是”平衡”,即左右子树高度几乎一致,以此来防止树退化为链表,通过这种方式来保障查找的时间复杂度为log(n)。 下面先主要提一下红黑树…

红黑树的原理及实现

红黑树的原理及实现 一、什么是红黑树二、定义红黑树三、左旋和右旋四、红黑树插入节点 一、什么是红黑树 红黑树是一种特定类型的二叉树,它是在计算机科学中用来组织数据比如数字的块的一种结构。 红黑树是一种平衡二叉查找树的变体,它的左右子树高差有…

【图文详解】彻底了解红黑树底层实现原理

红黑树定义 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操…

红黑树(一)之 原理和算法详细介绍

概要 目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除 作者:Sky Wang 于 2013-08-08 概述:R-B Tree&#xff…

数据结构 | 【红黑树】图解原理

今天我们要说的红黑树就是就是一棵非严格均衡的二叉树,均衡二叉树又是在二叉搜索树的基础上增加了自动维持平衡的性质,插入、搜索、删除的效率都比较高。红黑树也是实现 TreeMap 存储结构的基石。 红黑树就是非严格均衡的二叉搜索树。 一、红黑树规则特…

红黑树原理简单解析

一、红黑树为什么会出现呢? 是因为二叉搜索树有可能会出现极端的情况,就是只有一侧有数据,那这样的话就会降级为链表。后来出现了平衡二叉树,但是由于强制平衡所导致付出的代价比较高昂,所以黑红树出现了。 二、简介…

laravel框架的下载与安装

首先我们先访问这个网址https://github.com/laravel/laravel 可以使用git克隆 或者直接下载安装包到自己的www目录下解压,此时访问localhost下的laravel目录, 此时会报没有vendor文件夹的一个错, 如果你已经下载了composer 在该文件夹目录下…

Laravel

Laravel的安装 1.确认composer已经安装 2.配置homestead.yaml文件sites:- map: laravel.xyz//域名配置to: /home/vagrant/code/laravel/public//入口文件路径 databases://数据库- laravel 3.用秘钥登录homestead 4.更换中国镜像: composer…

Laravel下载文件及文档

2019独角兽企业重金招聘Python工程师标准>>> Laravel学院提供的相关资源下载 中文文档 Laravel 5.6 中文文档:PDF(兼容 5.5 文档) Laravel 5.3 中文文档:CHM | PDF Laravel 5.2 中文文档:CHM | PDF Laravel…

Laravel-admin的安装步骤

1、先确保是否安装composer,laravel及其版本并切换到阿里镜像 composer -v 查看composer的版本 php artisan 查看laravel的版本 扩展说明下:如果已经安装好composer,也可以通过 Composer 安装 Laravel 安装器 命令如下:composer…

如何正确的下载安装使用别人的laravel项目?

转载的,写的很简洁明了,白俊瑶博客 laravel 作为最流行的 php 框架;自然少不了很多基于 laravel 开发的项目;不过很多项目因为还处于开发中;或者其他原因并没有写安装文档;举个反面栗子;比如说我的 laravel-bjyadmin ;…