对于红黑树的了解

一、首先先来了解什么是2-3-4树
1.简介
2.三种节点的示意图
3.构建一颗2-3-4树
二、红黑树
1.认识红黑树的特性
2.从2-3-4树到红黑树
3.通过2-3-4树构建红黑树

一、首先先来了解什么是2-3-4树
1.简介
2-3-4 树在计算机科学中是阶为 4 的B树。大体上同B树一样,2-3-4 树是可以用做字典的一种自平衡数据结构。它可以在O(logn)时间内查找、插入和删除,这里的n是树中元素的数目。
每个儿子都是(可能为空)一个子 2-3-4 树。根节点是其中没有父亲的那个节点;它在遍历树的时候充当起点,因为从它可以到达所有的其他节点。叶子节点是有至少一个空儿子的节点。
2-3-4属于一种多路查找树,是一种四阶的B树,它的结果有以下特点
1.所有叶子节点都拥有相同的深度
2.节点只能是2-节点、3-节点、4-节点节点
2-3-4 树把数据存储在叫做元素的单独单元中。它们组合成节点,每个节点都是下列之一
(1)2-节点,就是说,它包含 1 个元素和 2 个儿子,
(2)3-节点,就是说,它包含 2 个元素和 3 个儿子,
(3)4-节点,就是说,它包含 3 个元素和 4 个儿子 。
3.元素的排序整体上保持二叉查找树的特性,即父节点大于左子节点,小于右子节点;当节点有多个元素时,每个元素都必须大于他左边的和他的左子树中的元素。
2-3-4 树是红黑树的一种等同,这意味着它们是等价的数据结构。换句话说,对于每个 2-3-4 树,都存在着至少一个数据元素是相同次序的红黑树。在 2-3-4 树上的插入和删除操作也等价于在红黑树中的颜色翻转和旋转。这使得它成为理解红黑树背后的逻辑的重要工具。
2.三种节点的示意图
①:2-节点:有两个子树的节点
在这里插入图片描述
②:3-节点:有三个子树的节点
在这里插入图片描述
③4-节点:有四颗子树的节点
在这里插入图片描述
3.构建一颗2-3-4树
2-3-4树中结点添加需要遵守以下规则:
1.插入都是向最下面一层插入
2.升元:将插入结点由 2-结点升级成 3-结点,或由 3-结点升级成 4-结点
3.向 4-结点插入元素后,需要将中间元素提到父结点升元,原结点变成两个 2-结点,再把元素插入 2-结点中,如果父结点也是4-结点,则递归向上层升元,至到根结点后将树高加1;
将1 2 3 4 5 6 7 8 9 10 11 12 构建成一个2-3-4树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于我们是从下到上进行构建的,所以我们能够保证所有叶子节点都拥有相同的深度
二、红黑树
1.认识红黑树的特性

1.每个节点不是红色就是黑色
2.根节点是黑色
3.每个叶子节点(NIL节点,空节点)是黑色的
4.如果一个节点是红色的,则他的子节点必须是黑色的
5.从一个节点到该节点的所有子孙节点的所有路径上包含相同数目的黑色节点

当新添加一个节点到树中后,将其颜色置为red,遵循以下原则对整个树进行调整:
1、当插入的节点的父节点为null,则将该节点颜色置为black。
2、当插入节点的父节点颜色为black,不需要调整。
3、当插入节点的父节点为red,其叔父节点亦为红色,则将其父亲节点和叔父节点置为black,同时将祖父节点置为red,将祖父节点设置为当前新增节点,重新按照从规则1开始判断。
4、但插入节点的父亲节点为red,其叔父节点为black或null,则需要分多钟情况考虑。
(1)新增节点为父亲节点右孩子同时父亲节点是祖父节点的左孩子,则进行左旋,将父节点置为新节点,重新按照规则1进行判断;
(2)新增节点为父亲节点左孩子,同时父亲节点是租户节点的右孩子,则进行右旋,将父节点置为新节点,重新按照规则1进行判断;
5、不满足上述所有条件,将父节点置为black,同时,将祖父节点置为red,进行以下两种情况判断。
(1)如果新增节点是父亲节点的左孩子,同时,父亲节点是祖父孩子的左孩子,则对祖父节点进行右旋
(2)其他情况,对祖父节点左旋。

将插入的节点写为红色,就不会违背特性5,少违背一条特性,也就意味着我们需要处理的情况也就越少。
在这里插入图片描述
2.从2-3-4树到红黑树
2-3-4树的查询操作像普通的二叉搜索树一样,非常简单,但由于其结点元素数不确定,在一些编程语言中实现起来并不方便,实现一般使用它的等同——红黑树。
至于为什么说红黑树是 2-3-4树的一种等同呢,这是因为 2-3-4树的每一个结点都对应红黑树的一种结构,所以每一棵 2-3-4树也都对应一棵红黑树,下图是 2-3-4树不同结点与红黑树子树的对应。
在这里插入图片描述
在这里插入图片描述
3.通过2-3-4树构建红黑树
新插入的结点颜色为红色,这样才可能不会对红黑树的高度产生影响。
2-结点对应红黑树中的单个黑色结点,插入时直接成功(对应 2-结点升元)。
3-结点对应红黑树中的黑+红子树,插入后将其修复成 红+黑+红 子树(对应 3-结点升元)
4-结点对应红黑树中的红+黑+红子树,插入后将其修复成红色祖父+黑色父叔+红色孩子子树,然后再把祖父结点当成新插入的红色结点递归向上层修复,直至修复成功或遇到 root 结点;
在这里插入图片描述如上图所示,虽然向红黑树中插入了一个新结点,但由于旋转和变色,子树的高度保持不变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值