红黑树

红黑树与2-3树具有等价性,我们在了解红黑树前先了解2-3树对我们理解红黑树是有帮助的,同时,对于理解B树也是有帮助的(用于磁盘存储,文件系统或数据库存储)

1. 简介2-3树

下面的图片就是一颗2-3树
在这里插入图片描述在这里插入图片描述在这里插入图片描述
可以看出,2-3树是一棵绝对平衡的树——根节点到任意一个叶子节点所经过的节点数量是相同的

2. 如何维护2-3树的绝对平衡?

我们来看看下面例子
在这里插入图片描述
假设现在有个根节点42,现在要向42添加一个元素37,如果是二分搜索树,则37应该添加到42的左子节点,但是2-3树有一个很重要的性质:就是对于2-3树来说添加节点绝对不会添加到一个空的位置
因为42的左子树为空,所以37只能添加到最后一个叶子节点上,而现在最后一个叶子节点是根节点42,所以37与42融合,成为一个3-节点,此时只有一个节点,整个树是绝对平衡的。
在这里插入图片描述
现在我们又添加一个12,但此时根节点的左子树还是为空,为了保持绝对平衡,12先与根节点融合成为4-节点
在这里插入图片描述
但由于2-3树不能存在4-节点,所以此时的根节点可以分裂成一棵子树,有三个2-节点组成的绝对平衡树

在这里插入图片描述
这里我们总结下:2-3树中添加一个新的元素,它不会像二分搜索树一样添加到一个空的节点位置,它一定会添加到我们最后搜索到的叶子节点,和它进行融合

2.1.要插入节点为2节点

如果我们要融合的节点是个2-节点的话,我们就直接融合成一个3-节点
在这里插入图片描述

2.2.要插入节点为3节点

2.2.1.要插入节点的父节点为根节点

如果我们融合的节点本来就是一个3-节点的话,我们就临时融合成一个4-节点,然后这个4-节点我们再将它变形,变形成一个子树,如果我们融合的这个3-节点本身就是根节点,那很好办
在这里插入图片描述

2.2.2.要插入节点的父亲节点为2节点

如果我们融合的3-节点是叶子节点,父亲节点为2-节点的话

在这里插入图片描述在这里插入图片描述

2.2.3.要插入节点的父亲节点为3节点

如果我们融合的3-节点是叶子节点,父亲节点为3-节点的话
在这里插入图片描述
在这里插入图片描述

3. 红黑树与2-3树的等价性

3.1.在红黑树中与2-3树中2-节点和3-节点对应的关系

对于红黑树,它只能存在一个元素,所以2-3树中2-节点和3-节点在红黑树中对应的关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.红黑树的5个性质

最后,我们来看下红黑树的5个性质:
在这里插入图片描述
1)这条就不用讲了:)
2)红黑树本身等价于2-3树,而红黑树中的根节点要不是2-节点,要不就是3-节点,我们看下面这这张图2-3树中2-节点和3-节点的等价图:
在这里插入图片描述
3)第三条我们要看清楚是指的最后的空节点,这条与其说是性质,不如说是定义,我们再红黑树定义空为黑色
4)我们还是可以更据2-3树中2-节点和3-节点的等价图来看
在这里插入图片描述
红色节点下面有两个节点,如果子节点是2-节点的话,那肯定就是黑色,如果是3-节点,那首先连接的也是黑色,然后黑色的左节点才是红色(而对于黑色节点,它的右孩子肯定是黑色,左孩子就不一定了)
5)这条是核心,我们看下下面的图就一清二楚了
在这里插入图片描述
由于红黑树的最大高度为2logn,它会比AVL树的高度高,所以我们再红黑树上对元素的寻找会比AVL慢一点,虽然都是O(logn)级别,但是为什么红黑树这么重要,因为对于红黑树来说,添加与删除元素这两个操作相比于AVL来说更快一些,如果我们存储的数据结构要经常发生添加和删除的变动的话,相应的使用红黑树会更好些。而数据不怎么变动,查询更多的话,AVL还是快一点点。
为什么为2logn?因为树木的高度为logn,每个节点下面都可能会有一个红色节点

4. 红黑树添加元素的子方法

我们先看下在2-3树中添加一个新的元素:
添加进2-节点,形成一个3-节点
添加进3-节点,形成一个4-节点
所以可以看到,红黑树添加节点时,永远添加红色节点,后续再根据树的平衡情况做相应的调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值