红黑树原理【2-3-4树】

jdk 1.8 HashMap中所用的红黑树是由2-3-4树演变过来的。下面是描述2-3-4树是什么,以及2-3-4树生成原理和红黑树关系。

2-3-4树 是指 2树、3树、4树的集合

  1. 2树是有一个元素和两个子节点的树。下图是简单的2树,他的元素是3,子节点分别是 2和4。
    在这里插入图片描述

  2. 3树是有两个元素和三个子节点的树。下图是3树,他的元素是[3,5],子节点分别是 2和4和[6,7,8]。
    在这里插入图片描述

  3. 4树是有三个个元素和四个子节点的树。下图是4树,他的元素是[3,5,7],子节点分别是 2、4、6、 [8,9]。
    在这里插入图片描述

2-3-4树的生成过程

假设有一个数组 [2,3,4,5,6,7,8,9,10,11,12,1],我们需要把它变为2-3-4树。下面罗列每个步骤流程。

  1. 添加元素 2,3,4
    当树的元素没有超过3个的时候,新加的元素直接放在一个数组中,如下图。
    在这里插入图片描述

  2. 继续添加元素5
    下一步就需要把5加入树中。如下图,可以看到4树最多只有3个元素,现在已经超出了,需要对树进行调整。
    在这里插入图片描述

  3. 超出3个元素的节点调整规则如下。
    原来是 [2,3,4]现在加入5,得到[2,3,4,5],长度超出3个,需要把第二个元素提出来,放到父节点。然后剩下两个元素分别作为左右节点。这个过程暂且称为裂变,提出以后结构如下图所示。
    在这里插入图片描述

  4. 插入元素6
    在这里插入图片描述

  5. 插入元素7
    在这里插入图片描述

  6. 调整节点
    右节点超出4树标准,继续对右节点 [4,5,6,7] 进行裂变。得到下图的节点。
    在这里插入图片描述

  7. 融合节点
    把步骤6 得到的节点和之前节点融合【注意这里需要把提取的元素 5和原来的父节点元素3,融合在一起】,得到下图结构。
    在这里插入图片描述

  8. 插入元素8
    在这里插入图片描述

  9. 插入元素9
    在这里插入图片描述

  10. 重复裂变操作
    在这里插入图片描述

  11. 插入元素10
    在这里插入图片描述

  12. 插入元素11
    在这里插入图片描述

  13. 重复裂变操作
    这里我们把9往上提的时候会发现,父节点也超出了3个元素,所以这里需要对父节点也进行裂变操作在这里插入图片描述

  14. 对父节点进行裂变操作
    在这里插入图片描述

  15. 重新为父节点分配子节点
    分配规则如下:小于父节点的,放在左边。大于父节点的,放在右边。
    在这里插入图片描述

  16. 插入元素12
    在这里插入图片描述

  17. 插入元素1
    上述流程是为了简化步骤,所以数字都是递增的,其实每插入一个元素都是要,查找适合的位置存放,条件就是 左边元素 < 新元素 < 右边元素。所以现在插入1,插入位置如下所示。
    在这里插入图片描述

最终结构如下:
在这里插入图片描述
下一篇继续2-3-4树和红黑树关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值