美文网首页
理解红黑树

理解红黑树

作者: 全都是泡沫啦 | 来源:发表于2018-11-30 09:50 被阅读0次

前序

爱研究源码的你可能会发现JDK8中大量的使用红黑树结构,比如:TreeMap,TreeSet(内部使用TreeMap),HashMap与ConcurrentHashMap(在相同hash值槽位table中节点个数>8,会将之前的链表装换为红黑树),以及继承HashMap的众多子类(如LinkedHashMap),无论是提高自身代码能力还是去应付面试,我们都需好好理解一下红黑树,下面让我们开始吧。

  1. 定义

红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般>要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3 每个叶节点(NIL节点,空节点)是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

  1. 插入展示


    红黑树的插入.jpg

2.1 红色父类xp插入节点x的需调整的步骤(xp的父亲为xpp)
x为根节点或者x为红色,重置为黑色, 完成.
当xp的兄弟节点存在且为红色,xp和xp的兄弟节点重置为黑色,xpp重置为红色将xpp做为x继续调整(如插入4)
当xp的兄弟节点不存在(如插入7或插入3)插入7的情况需先变为插入3的情况

  1. 删除展示


    红黑树的删除1.jpg
    红黑树的删除2.jpg

3.1 待删除节点的后继为黑色的删除步骤 待删除节点为x,xp为父类,xpp为爷爷
x为根节点或者x为红色,重置为黑色, 完成.
x的兄弟为红,可以借用旋转xp
x的兄弟节点为黑且其有红色子节点,可以通多旋转进行借用,注意只有一个子红色节点需要进行类似于插入7到插入3的旋转
x的兄弟节点为黑且没有红色子节点,则x的兄弟节点重置颜色为红,将xp作为x继续进行判断

  1. 查询
    按照二叉排序(搜索)树进行查找

附:文中红黑树的画图我通过www.processon.com在线作图生成,链接如下
https://www.processon.com/view/link/5bff3bf6e4b0ef094cc1aadb
https://www.processon.com/view/link/5bff9e78e4b006dc83a9b052
https://www.processon.com/view/link/5bffa611e4b018141e86c995

相关文章

  • 彻底理解红黑树(二)之 插入

    彻底理解红黑树(一)之 二叉搜索树彻底理解红黑树(二)之 插入彻底理解红黑树(三)之 删除 前言 红黑树的插入情况...

  • 彻底理解红黑树(三)之 删除

    彻底理解红黑树(一)之 二叉搜索树彻底理解红黑树(二)之 插入彻底理解红黑树(三)之 删除 前言 红黑树的删除情况...

  • 彻底理解红黑树(一)之二叉搜索树

    彻底理解红黑树(一)之二叉搜索树彻底理解红黑树(二)之插入彻底理解红黑树(三)之删除 1. 二叉搜索树的定义 二叉...

  • 理解红黑树

    前序 爱研究源码的你可能会发现JDK8中大量的使用红黑树结构,比如:TreeMap,TreeSet(内部使用Tre...

  • 红黑树理解

    1.查找的演变 2.2-3查找树(动态平衡) 3.红黑树原理

  • 理解红黑树

    国庆成功的浪了8天,中间断断续续的看书,也没啥总结,不过最近在看stl源码剖析,看到了红黑树这一块,红黑树由于其优...

  • 理解红黑树

    红黑树的属性 红黑树是一种特殊的二叉搜索树,除了拥有二叉搜索树的属性外,还附加有以下的属性: 每个节点都是红色或者...

  • 数据结构学习_02红黑树平衡操作

    参考文章 : 红黑树原理解析以及Java实现 红黑树(五)之 Java的实现 废话不多说, 直接开始分析 一、红黑...

  • 红黑树

    红黑树图Java在实现TreeMap中用到了红黑树,在此记录自己的理解。 定义 红黑树是二叉搜索树的一种实现方式,...

  • 红黑树笔记

    红黑树笔记 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(...

网友评论

      本文标题:理解红黑树

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