关于2-3-4树和红黑树的简单理解

 在介绍红黑树之前需要我们了解一下什么是2-3-4树

一、2-3-4树简介

2-3-4树属于一种多路查找树,树是从下往上生成的,具有以下的特点

1.所有的叶子节点都拥有相同的深度

2.节点只能2-节点、3-节点、4-节点

3.元素整体上的排序保持二叉查找树(有序二叉树)的特点,左节点比父节点小,右节点比父节点大

二、三种节点的示意图

2-节点:有两个子树的节点

3-节点:有三个子树的节点

 

4-节点:有四个子树的节点

https://note.youdao.com/yws/public/resource/79e724cb17df4e4998fa171100fd0ba8/xmlnote/WEBRESOURCE5957fa4fff70c762d182ada1066501d4/62627


三、构建一颗2-3-4树的例子 

2-3-4树的构建需要遵循以下规则:

  • 插入都是向最下面一层插入
  • 升元:将插入结点由 2-结点升级成 3-结点,或由 3-结点升级成 4-结点
  • 向 4-结点插入元素后,需要将中间元素提到父结点升元,原结点变成两个 2-结点,再把元素插入 2-结点中,如果父结点也是4-结点,则递归向上层升元,至到根结点后将树高加1;

现在举一个简单的例子

将1 2 3 4 5 6 7 8 9 10 11 12构建成为一个2-3-4树

 

先将1 2 3 4四个节点依次加入,当4加入的时候应该进行升元操作(图中是将3升上去,但也可以2升上去,如果2升上去,左子树就是1,右子树是3和4)

 然后将5 6 7依次加入,当7加入的时候又要进行升元操作,图中是5上升(和上图里我所对应的解释一样,取中间谁上升都可以),5上升后 ,从5分割开两节点,一个节点是4,一个节点是6 7,并且4节点放在中间(因为4比3大比5小),而6 7节点放在5的右边(这遵循着有序二叉树的排序规则),同理进行下面所有节点的操作

 

 当把11插入时,把9上升 ,那么现在最上面的节点就是3 5 7 9四个数了,满足升元的操作,就需要把它也进行升元,取5 7任意一个上升,下图是对5进行上升

https://note.youdao.com/yws/public/resource/79e724cb17df4e4998fa171100fd0ba8/xmlnote/WEBRESOURCEb123c5bd7e4eed7a3e23c6b7df87893f/62631

通过该例子的解释,我们也能发现,所有的叶子节点都拥有相同的深度

红黑树

一、红黑树的特点:

1.每个节点不是黑色就是红色

2.根节点永远是黑色

3.叶子节点是null节点,且颜色是黑的

4.当一个节点是红色的,那么它的子节点必须是黑色的

5.一个节点的所有子孙节点到该节点的所有路径上包含相同数目的黑色节点

注:可以通过下图把每个特点理解一下

其中将特点5进行一下解释,比如说根节点50 的子孙节点40 48 56 90 从50到他们的路径上,所经过的黑色节点都只有一个,是相同的

二、2-3-4树和红黑树关系

2-3-4树的查询操作像普通的二叉搜索树一样,非常简单,但由于其结点元素数不确定,在一些编程语言中实现起来并不方便,实现一般使用它的等同——红黑树。

至于为什么说红黑树是 2-3-4树的一种等同呢,这是因为 2-3-4树的每一个结点都对应红黑树的一种结构,所以每一棵 2-3-4树也都对应一棵红黑树,下图是 2-3-4树不同结点与红黑树子树的对应。

接下来借用这个图给大家讲一下

 上图是三种情况,分别是节点里只有1个数据,2个数据和3个数据,无论是哪一种情况,要先选出一个数据是黑色节点当根节点,然后剩余的数据为黑色节点(可以当做一个小技巧,当一个节点里只有一个数据的时候他是黑色的,当一个节点里有多个数据的时候,选一个为黑色,其余都为红色)

特殊说明:我们每次新插入的节点都是红色

将插入的节点写为红色,就不会违背特性5,少违背一条特性,也就意味着我们需要处理的情况也就越少。

 

三、通过2-3-4树构建红黑树

  • 新插入的结点颜色为红色,这样才可能不会对红黑树的高度产生影响。
  • 2-结点对应红黑树中的单个黑色结点,插入时直接成功(对应 2-结点升元)。
  • 3-结点对应红黑树中的黑+红子树,插入后将其修复成 红+黑+红 子树(对应 3-结点升元);
  • 4-结点对应红黑树中的红+黑+红子树,插入后将其修复成红色祖父+黑色父叔+红色孩子子树,然后再把祖父结点当成新插入的红色结点递归向上层修复,直至修复成功或遇到 root 结点;

https://note.youdao.com/yws/public/resource/79e724cb17df4e4998fa171100fd0ba8/xmlnote/WEBRESOURCE9f4ffc76d070e5c24153369b4ab733e2/62635

 如上图所示,虽然向红黑树中插入了一个新结点,但由于旋转和变色,子树的高度保持不变。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值