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

一、2-3-4树简介

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

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

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

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

二、三种节点的示意图

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

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

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

三、构建一颗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进行上升

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

红黑树

一、红黑树的特点:

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 结点;

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

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

  1. 对AVL树和红黑树的个人理解

    都说编程算法很重要,可真没见几个.NET程序员研究算法的.这些日子非主流地研究了一些小算法,红黑树和AVL树算是其中复杂的了,但实际也就二三百行代码.悲催的是,网上根本找不到C#的理想版本(包括国外网 ...

  2. AVL树、splay树(伸展树)和红黑树比较

    AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实 ...

  3. AVL树和红黑树区别

    二叉查找树: 二叉查找树就是左结点小于根节点,右结点大于根节点的一种排序树,也叫二叉搜索树.也叫BST.二叉查找树比普通树查找更快,查找.插入.删除的时间复杂度为O(logN).但是二叉查找树有一种极 ...

  4. B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树

    B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...

  5. 【题集】AVL树、伸展树、红黑树、二叉查找树、替罪羊树的时间复杂度

    目录 1. AVL树 2.伸展树 3.红黑树 4.二叉查找树 5.替罪羊树 1. AVL树 AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平 ...

  6. 二叉排序树、AVL树、红黑树、B树、B+树、Hash树、

    二叉排序树 1.基本应用 二叉排序树也称为也叫二叉查找树,二叉搜索树, BST. 满足二叉查找树的一般性质,是指一棵空树具有如下性质: 对于二叉树中的任何一个非叶子节点,要求左子节点比当前节点值小,右 ...

  7. 从2-3树到 红黑树

    原文:   查找(一)史上最简单清晰的红黑树讲解 二叉查找树由于可能会非常的不均衡. 所以用2-3树. 采用上上浮的方法,顶多多两倍节点数. 红黑树一直是数据结构中的难点,大部分关于算法与数据结构的学 ...

  8. 树 - (二叉查找树,红黑树,B树)- 红黑树

    虽是读书笔记,但是如转载请注明出处 http://segmentfault.com/blog/exploring/ .. 拒绝伸手复制党 关于二叉树的基本知识,可以参见:Java 实现基本数据结构 2 ...

  9. 讲透学烂二叉树(五):分支平衡—AVL树与红黑树伸展树自平衡

    简叙二叉树 二叉树的最大优点的就是查找效率高,在二叉排序树中查找一个结点的平均时间复杂度是O(log₂N): 在<讲透学烂二叉树(二):树与二叉/搜索/平衡等树的概念与特征>提到 二叉排序 ...

最新文章

  1. 设置Nginx开机自动启动(centos6.8上亲测可用)
  2. CAD图纸文件中标注的尺寸如何进行隐藏?
  3. Android使用开源项目Xutils实现多线程下载文件
  4. .net获取地址栏中的url
  5. 最后一周|高级转录组分析和R语言数据可视化第十二期 (线上线下同时开课)...
  6. 没有服务器配置信息是怎么回事,isp服务器未配置怎么回事
  7. Linux用户(user)和用户组(group)的日常管理与操作教程概述
  8. 近期必读 ICLR 2021 【模型压缩】【预训练】相关论文】
  9. Runtime中神奇的exec方法
  10. python笔记整理
  11. c语言tc2.0编译器下载,c语言tc2.0下载
  12. 网络安全(加密技术、数字签名、证书)
  13. 5750G GT540M显卡游戏蓝屏的终极解决方法!
  14. CSS3——渐变(线性渐变、径向渐变、重复性渐变)
  15. gcc -O0 -O1 -O2 -O3 -Os 编译优化等级
  16. 【综述】计算机视觉简介:历史、现状和发展趋势【可下载】
  17. Dinky 0.6.2 已发布,优化 Flink 应用体验
  18. 【转贴】【管理】生存奥秘诙谐解说
  19. word文档编辑受限怎么解除
  20. 格式化后如何恢复数据?

热门文章

  1. 信息学奥赛一本通 1386:打击犯罪(black)
  2. Centos7 下nexus的安装和使用
  3. Android隐藏软件盘
  4. C# List排序和数字处理(三位加一撇)
  5. 光猫,路由器,机顶盒的区别
  6. 全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了
  7. 双卡手机管理短信通知 | 屏蔽短信通知
  8. 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程
  9. 全新荣耀手表GS 3正式发布,8通道心率AI引擎精准高效管理健康生活
  10. 正确认高分子PEG:识MTA mPEG,Myristic-acid PEG,肉豆蔻酸 PEG,PEG改性肉豆蔻酸