2-3树:插入变成2个节点正常插,变成3个节点就要提升中间节点和分裂子节点,满足:要么没有子节点,要么2个子节点,要么3个子节点。

2-3-4树:插入变成2个不动,插入变成3个不动,插入变成4个提升原来中间节点和分裂子节点,满足:要么没有子节点,要么2个子节点,要么3个子节点,要么4个子节点。

2节点黑色,3节点左倾和右倾,4节点上黑下2红。

左倾2-3树:2节点黑色,3节点左下红右上黑。

红黑树插入和2-3-4树的对应关系:

先插入10再插入12,所以是右倾。

先提升12分裂10和14,所以10在12子节点上,在加上9,所以是左倾。       再加上15,因为14在12子节点上,所以是右倾。      

2-3-4树只是规定了普通红黑树最终的样子和颜色,中间调整规则  是通过2-3-4树推到出来的,规则如下:

JDK1.8  TreeMap的红色树插入规则:

1.父亲是黑色,退出

2.父亲是红色

  2.1爷爷左边

    2.1.1爷爷右节点是红色 条件1

      父亲变黑,爷爷右节点变黑,爷爷变红,x指向爷爷继续判断

    2.1.2爷爷右节点是黑色

      2.1.2.1父亲右边    条件2

        左旋父亲 —> 2.1.2.2父亲左边 条件3

          父亲变黑,爷爷变红,右旋转爷爷

  2.2爷爷右边

    2.2.1爷爷左边红色 条件1.1

      父亲变黑,爷爷左边变黑,爷爷变红,x指向爷爷继续判断

    2.2.2爷爷左边黑色

      2.2.2.1父亲左边 条件2.1

        右旋转父亲 —> 2.2.2.2父亲右边 条件3.1

          父亲变黑,爷爷变红,左旋转爷爷

case 1. 根结点,设为黑色,结束

case 2. 父黑色,不调整,结束

case 3. 叔叔红色,插入节点可左可右:父黑叔叔黑,爷爷红,指向爷爷再看(颜色调整)。

case 4. 叔叔黑色

    父节点左右和爷爷节点左右不在同一边,先旋转父节点到同一边

    父黑爷爷红(颜色调整),反向旋转爷爷

红黑树(对应2-3-4树)和左倾红黑树(对应2-3树)

普通红黑树:允许一个节点有两个红色的子节点

左倾红黑树:一个节点只能有一个红色子节点,并且是左节点

普通红黑树(以下简称红黑树)对应2-3-4树

左倾红黑树对应2-3树

2-3-4树呢?顾名思义,就是有2个子女,3个子女,或4个子女的结点,这些含有2、3、或4个子女的结点就构成了我们的2-3-4树。

一颗红黑树对应唯一形态的2-3-4树,但是一颗2-3-4树可以对应多种形态的红黑树(主要是3节点可以对应两种不同的红黑树形态)

红黑树(普通红黑树,不是左倾红黑树)的五个性质:

1)每个结点要么是红的,要么是黑的。

2)根结点是黑的。

3)每个叶结点,即空结点(nil)是黑的。

4)如果一个结点是红的,那么它的俩个儿子都是黑的。

5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。

左倾红黑树:

  1. 红链接均为左链接。
  2. 没有两条红链接相连。
  3. 任意空链接到根结点的路径上的黑链接数量相同。

传送门:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

2-3-4树(jdk8的TreeMap的红黑树)的更多相关文章

  1. Java集合详解6:TreeMap和红黑树

    Java集合详解6:TreeMap和红黑树 初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储 ...

  2. 左倾红黑树——左倾2-3树(不是jdk1.8的TreeMap的红黑树)

    public class RBTree<K extends Comparable<K>, V> { public static boolean RED = true; publ ...

  3. 【算法】通过TreeMap理解红黑树

    本文以Java TreeMap为例,从源代码层面,结合详细的图解,剥茧抽丝地讲解红黑树(Red-Black tree)的插入,删除以及由此产生的调整过程. 总体介绍 Java TreeMap实现了So ...

  4. TreeMap(红黑树)源码分析

    1. HashMap.Entry(红黑树节点) private static final boolean RED = false; private static final boolean BLACK ...

  5. JDK源码学习笔记——TreeMap及红黑树

    找了几个分析比较到位的,不再重复写了…… Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例 [Java集合源码剖析]TreeMap源码剖析 java源码分析之TreeMap基础篇 ...

  6. Java中的TreeMap及红黑树

    TreeMap: http://blog.csdn.net/tobeandnottobe/article/details/7232664 红黑树: http://blog.chinaunix.net/ ...

  7. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  8. 红黑树、B(+)树、跳表、AVL等数据结构,应用场景及分析,以及一些英文缩写

    在网上学习了一些材料. 这一篇:https://www.zhihu.com/question/30527705 AVL树:最早的平衡二叉树之一.应用相对其他数据结构比较少.windows对进程地址空间 ...

  9. 死磕 java集合之TreeMap源码分析(一)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历. 继承体系 Tr ...

随机推荐

  1. 一种优化操作list、数组的多线程解决方案。

    这几天接触到了一些操作list的功能,由于list太长,加上每条数据的处理时间,导致性能下降,正好利用学来的多线程知识和网上的资料结合实践一番,写出了一个通用类如下. /** * 操作数组的线程 * ...

  2. 我用Bash编写了一个扫雷游戏

    我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法.比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习. 我在编程教学 ...

  3. VMWare15.0手动为Mac OS10.14虚拟机安装VMWare Tools

    安装完客户机虚拟机后,无法在虚拟机和本机之间拖拽传输文件,开启虚拟机后,底部提示安装VMWare Tools,但是这里无法安装. 虽然可以联网后使用局域网工具(如FeiQ)来传输,但是老感觉不是太方便 ...

  4. APP手势密码绕过

    之前写的文章收到了很多的好评,主要就是帮助到了大家学习到了新的思路.自从发布了第一篇文章,我就开始筹备第二篇文章了,最终打算在07v8首发,这篇文章我可以保障大家能够学习到很多思路.之前想准备例子视频 ...

  5. vue父组件引用多个相同的子组件传值

    没有什么问题是for 解决不了的,我一直深信这句话,当然这句话也是我说的 父组件引用多个相同的子组件传值问题 (这种情况很少遇到) 1 <template> 2 <div> 3 ...

  6. FPM十一:点击POPUP显示明细

    沿接着前面的Search和List.在LIST中点击一列,弹出窗口显示明细. 1.list中定义事件: METHOD if_fpm_guibb_list~get_definition. DATA:gt ...

  7. spring data jpa使用详解

    https://blog.csdn.net/liuchuanhong1/article/details/52042477 使用Spring data JPA开发已经有一段时间了,这期间学习了一些东西, ...

  8. PAT 乙级 1047.编程团体赛 C++/Java

    题目来源 编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出冠军队. 输入格式: 输入第一行 ...

  9. C# HttpClient Post 参数同时上传文件 上传图片 调用接口

    // 调用接口上传文件 using (var client = new HttpClient()) { using (var multipartFormDataContent = new Multip ...

  10. 浅谈僵尸网络利器:Fast-flux技术

    浅谈僵尸网络利器:Fast-flux技术   一.背景 在早期的僵尸网络中,控制者通常会把C&C服务器的域名或者IP地址硬编码到恶意程序中,僵尸主机通过这些信息定时访问C&C主机获取命 ...