红黑树平衡原理

article/2025/11/3 7:58:00

红黑树定义

红黑树本身也是一种二叉树,只是它是一棵平衡的二叉树,也就是两个分支均匀生长的,左右平衡的二叉树,这样的二叉树有利于内存寻址,内存寻址的时间复杂度能够做到O(logN),我们知道数组的内存寻址时间复杂度是O(1),只要知道数组下标就可以迅速找到数组元素的值,而链表的内存寻址时间复杂度是O(N),寻址链表中某个元素,必须从链头元素,依次寻找链表上的全部元素,直到找到目标元素为止。红黑树内存寻址的效率是在数组和链表之间。

红黑树规则

为了红黑树两个分支均匀分布,必须设定一些规则约定红黑树的行为。

  1. 每一个树节点要么黑色,要么红色
  2. 根节点必须是黑色
  3. 如果树节点是红色的,它的左右两个子节点必须是黑色
  4. 从根到叶子节点的每条路径,包含的黑色节点数目必须相同
  5. 一个节点的左子节点的关键字值小于这个节点,右子节点的关键字值大于或等于这个父节点

红黑树名词定义

根节点,左右位置节点
在这里插入图片描述

外侧子孙节点

在这里插入图片描述
新增节点6是左侧节点,节点8也是左侧节点,那么新增节点6就是外侧子孙节点;
新增节点14是右侧节点,节点12也是右侧节点,那么新增节点14就是外侧子孙节点。
也就是说,新增节点所在左右位置,与其父节点所在左右位置相同时,新建节点就是外侧子孙节点。

内侧子孙节点

在这里插入图片描述
新增节点10是右侧节点,节点8也是左侧节点,那么新增节点6就是内侧子孙节点;
新增节点11是左侧节点,节点12也是右侧节点,那么新增节点11就是内侧子孙节点。
也就是说,新增节点所在左右位置,与其父节点所在左右位置不同时,新建节点就是内侧子孙节点。

外侧子孙节点右旋转

在这里插入图片描述
违背红黑树规则3,节点8有左侧分支,缺失右侧分支,可以将节点6提升一级,节点8降低一级,以节点6为顶点右旋节点8。
在这里插入图片描述
旋转后,还是违背红黑树规则3、4,下一步修改节点颜色,使其符号红黑树规则。
在这里插入图片描述
经过转换后,红黑树的两个分支基本均匀分布,能够提供查找效率。

外侧子孙节点左旋转

在这里插入图片描述
违背红黑树规则3,节点14有右侧分支,缺失左侧分支,可以将节点14提升一级,节点12降低一级,以节点14为顶点左旋节点12。
在这里插入图片描述
旋转后,还是违背红黑树规则3、4,下一步修改节点颜色,使其符号红黑树规则。
在这里插入图片描述

内侧子孙节点右旋转

在这里插入图片描述
首先旋转节点12、15、16,使其成为外层子孙节点,以节点15为顶点,右旋转节点16。
在这里插入图片描述
再以节点15为顶点,将节点14左旋转。
在这里插入图片描述

由此看出:内侧子孙节点旋转需要首先转为为外层子孙节点后,再完成一次外层子孙节点旋转达到平衡树的结果。


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

相关文章

[Java 8 HashMap 详解系列]7.HashMap 中的红黑树原理

[Java 8 HashMap 详解系列] 文章目录 1.HashMap 的存储数据结构 2.HashMap 中 Key 的 index 是怎样计算的? 3.HashMap 的 put() 方法执行原理 4.HashMap 的 get() 方法执行原理 5.HashMap 的 remove() 方法执行原理 6.HashMap 的扩容 resize() 原理 7.HashMap 中的红黑…

红黑树原理详解及代码实现

文章目录 1. 红黑树概念2. 节点定义3. 旋转操作4. 插入操作5. 删除操作6. 完整代码 1. 红黑树概念 下图就是一棵红黑树: 为了后续操作中不出现空指针异常,可以加入一个额外的哨兵节点T,T作为所有叶子节点的子节点,作为根节点的父…

快速理解红黑树原理

快速理解红黑树原理 红黑树 简介 红黑树 其实就是一个二叉树。 1.0 常用的二叉树类型 简单说二叉树概念: 二叉树 又称度为至多二的树。 1.1 平衡二叉树 平衡二叉树又称 AVL 树 特点:一个根节点的左右个子树的高度差不超过1 平衡二叉树 非平衡二叉树…

数据结构-红黑树原理分析

前言 在阅读HashMap源码的时候发现,java1.8的HashMap的链表实现增加了红黑树,当链表长度超过指定阈值8的时候回进行树化。 为了提高增删查的效率。 而红黑树又比较复杂,所以专门写一篇关于红黑树的文章。 概念 R-B Tree,全称是…

红黑树原理剖析

首先介绍一下红黑树的几点性质: 性质1:根节点是黑色 性质2:每个叶子节点是黑色(指的是空叶子节点) 性质3:每个红色节点的两个子节点一定是黑色 (子节点必须同时存在或不存在) 性质4:任意一节点到每个叶子节点的路径都包含数量相同的黑节点(非空叶子…

红黑树原理及插入

文章目录 1、前言2、红黑树2.1、性质2.2、操作2.2.1、变色2.2.2、左旋2.2.3、右旋2.2.4、查找2.2.5、插入 2.3、插入情景2.3.1、红黑树为空树2.3.2、插入结点的Key已存在2.3.3、插入结点的父结点为黑结点2.3.4、插入节点的父节点为红色2.3.4.1、叔叔结点存在并且为红结点 2.3.5…

红黑树原理及代码实现(一)

红黑树简介 红黑树是一种自平衡的二叉查找树,它的统计性能要优于平衡二叉树,因此在很多地方都有应用,例如Java中的TreeMap,HashMap等数据结构都使用到了红黑树。红黑树对很多人来说熟悉而陌生,熟悉则是因为知道红黑树…

图解红黑树原理

一.红黑树的性质(一种自平衡的二叉查找树) 1. 根节点是黑色。 2. 节点是红色或黑色 3. 叶子节点都是黑色的空节点(NIL节点) 意思就是末尾一排是黑色空节点(可全部省略) (叶子节点意思是没有子…

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

目录 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树(平衡二叉树),都是在进行插入和删除操…