美文网首页
数据结构-红黑树

数据结构-红黑树

作者: AAA前端 | 来源:发表于2021-07-26 18:17 被阅读0次

红黑树

红黑树(Red Black Tree) 是一种自平衡二叉查找树

红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能

红黑树,除了符合二叉搜索树的基本规则外,还添加了以下特性(规则):

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


    image.png

关键特性
从根到叶子的最长可能路径,不会超过最短可能路径的两倍长

  • 在插入新的节点时, 通常都是红色节点

  • 在插入新节点时,可能树不再平衡了。可以通过三种方式变换,让树保持平衡

    • 换色 - 左旋转 - 右旋转

换色
为了重新符合红黑树的规则,尝试把红色节点改为黑色节点,或者把黑色节点变为红色。
左旋转
逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子

右旋转
顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子

image.png

插入操作

假设插入的节点为N,其父节点为P, 其祖父节点为G, 其父节点的兄弟节点为U (P和U有相同的父节点G)

  1. 情况一:
  • 新节点N(默认为红色)位于树的根上,没有父节点

方案:这种情况,直接将红色变化为黑色即可 (规则2)

  1. 情况二
  • 新节点的父节点P为黑色 (直接符合规则)
  1. 情况三
  • 父节点P为红色,父节点的兄弟节点U也为红色


    image.png

    方案:

    • 将P和U变为黑色,把G变为红色
    • 现在新节点N有了一个黑色的父节点P,所有每条路径上的黑色节点数目没有改变
    • 而从更高的路径上,必然会经过G节点,所有那些路径的黑色节点数目也是不变的

可能出现的问题

  • N的祖父节点G的父节点可能也是红色,这违反了规则3, 把G节点下面的所有当成一个整体新节点G。再递归判断符合哪种情况情况。
  • 如果递归调整的颜色到了根节点,把根节点的颜色改为黑色即可。
  1. 情况四
  • 新节点N的叔叔节点U是黑色节点,且N是左节点

方案:

  • 交换父节点P和祖父节点G的颜色
  • 对祖父节点G进行右旋转


    image.png

    [图片上传中...(image.png-112472-1627113823203-0)]

  1. 情况五(如果新节点N不是左节点,父节点左旋转之后,可以得到情况3或情况4的结果,再变化即可
  • 比如:新节点N的叔叔节点U是黑色, 且N是右节点

方案:

  • 对P节点进行依次左旋转,形成情况四的结果
  • 对祖父节点G进行右旋转,并且改变颜色即可
image.png

栗子: 依次插入10,9,8,7,6,5,4,3,2,1

黑色的空节点null 没有画出来

image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png

相关文章

  • 数据结构红黑树添加、修改原理分析

    源码分析大纲 数据结构解析 红黑树试下原理刨析 数据结构解析 1.红黑树 1.1 红黑树概念 红黑树(Red Bl...

  • 数据结构 - 红黑树

    更多数据结构内容,请参考:数据结构 - 概要 简介 红黑树介绍请参考: 漫画:什么是红黑树? 面试旧敌之红黑树 红...

  • hashmap源码分析

    HashMap的数据结构 从上图中可以很清楚的看到,HashMap的数据结构是数组+链表+红黑树(红黑树since...

  • Red-Black Tree

    红黑树 前段时间看到STL map使用的数据结构是红黑树,研究了一下。 红黑树的由来 红黑树是二叉查找树的升级版本...

  • JDK1.8 之 集合框架 TreeMap TreeSet

    了解 Tree 之前我们必须了解 红黑树 因为Tree 的数据结构就是红黑树 红黑树的特性(1)每个节点或者是黑色...

  • 数据结构08-红黑树

    数据结构08-红黑树 一、红黑树的介绍 红黑树(RBT)是每个节点都带有颜色属性的自平衡二叉查找树,颜色或红色或黑...

  • 数据结构-红黑树学习笔记(转)

    rbt(红黑树) 图解红黑树:https://www.jianshu.com/p/0eaea4cc5619数据结构...

  • 2019-7-19

    部分常用容器类 HashMap 底层数据结构,数组 + 链表/红黑树链表类 - Node - 单链表 红黑树类 -...

  • java8中hashmap源码分析,put()方法详细分析

    一.源码大纲 1.了解红黑树原理(可翻看上一个文章,[红黑树原理分析](数据结构红黑树添加、修改原理分析 - 简书...

  • HashMap数据结构

    hashmap的数据结构由数组+链表+红黑树组成。

网友评论

      本文标题:数据结构-红黑树

      本文链接:https://www.haomeiwen.com/subject/wkxvmltx.html