【数据结构】图解2-3树(学习红黑树、B树的基础)

一、基本介绍

2-3树:满足二分搜索树的基本性质,是一颗绝对平衡的树,节点可以存放一个或两个元素,每个节点有2个或3个孩子(如果对二分搜索树不太了解,可以去看这篇文章【数据结构】二分搜索树小结)

            如下图所示都是2-3树,左边是节点存放了一个元素,右边是节点存放了两个元素,对于右边的图,左子树

【数据结构】图解2-3树(学习红黑树、B树的基础)_第1张图片

          下图是一个实例,可以好好体会一下什么是2-3树,这里说一下什么是绝对平衡树,就是根节点到任意节点所经过的节点数量绝对相同,节点的左右孩子高度一定一样,根据这个性值,就可以知道二叉搜索树(可能形成链式结构)、AVL树(左右子树高度不超过1)、堆(最后一层叶子节点可能没有填满)...这些都不是绝对平衡树。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第2张图片

                                                       下面就让我们通过图解插入元素去理解2-3树是如何实现绝对平衡的

二、图解插入元素流程

由于2-3树是一颗绝对平衡的树,那么在插入元素时就不能将元素插入到为空的位置(因为要保证绝对平衡),如下图。

此时的根节点root值为42,待插入的元素值为37,需要如何插入元素才能保证插入后仍然是一颗绝对平衡的树呢?这时root节点的孩子节点为空,如果直接插入其孩子节点中那显然就不是一颗绝对平衡的树了。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第3张图片

 始终记得,插入元素时不能将元素插入到空位置,那么对于上图而言,要想保证绝对平衡只有将37和42节点融合,如下图.

【数据结构】图解2-3树(学习红黑树、B树的基础)_第4张图片

那么这时如果再来一个元素,如下图这时该怎么插入呢?

【数据结构】图解2-3树(学习红黑树、B树的基础)_第5张图片

 其实还是和插入37元素一样,由于不能向空的位置插入,那么也只能融合。但是下图融合后形成了四节点(指的是可拥有孩子数量),这不符合2-3树的定义,对于2-3树,能拥有的孩子节点数只能是2或3,因此还需要进行调整。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第6张图片

调整结果如下图,这样就保证满足了2-3树的性质。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第7张图片

这时再来一个元素,如下图,这时看起来18可以和37融合,也可以和12融合,但是结果是和12融合,因为插入元素时,一直先从根节点开始向下寻找,只有当孩子节点为空时才会和父节点融合,如果孩子节点不为空,则向下融合。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第8张图片

【数据结构】图解2-3树(学习红黑树、B树的基础)_第9张图片

到了这里,相信对2-3树的插入流程有了一个清晰的理解,这时如果再插入一个元素,如下图,

【数据结构】图解2-3树(学习红黑树、B树的基础)_第10张图片

其实还是一样,先一直从根节点朝下寻找,直至找到某节点的孩子节点为空时就与该结点融合。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第11张图片

融合之后,形成了四节点,这时就又需要进行调整,和之前解决三个元素方案一样,先进行拆解,但是拆解过后不满足绝对平衡了,所以还需要再调整。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第12张图片

对于上图这种四节点拆解后,如果没有满足绝对平衡则需要将拆解后的父节点向上融合,也就是值为12的节点,然后其左孩子节点位于向上融合节点的左处、右孩子节点位于向上融合后节点的中间孩子。如下图,这样就又形成了一颗绝对平衡的树。其实也就是如果一个节点达到了有三个元素,且该节点不是root节点则就需要将该节点的中间元素向上融合,左边元素就更新为融合后节点的左孩子,右边元素就更新为融合后节点的中间孩子。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第13张图片

下面再来看最后一种情况,有了前面的基础就直接用图给出。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第14张图片

 

【数据结构】图解2-3树(学习红黑树、B树的基础)_第15张图片

【数据结构】图解2-3树(学习红黑树、B树的基础)_第16张图片

【数据结构】图解2-3树(学习红黑树、B树的基础)_第17张图片

【数据结构】图解2-3树(学习红黑树、B树的基础)_第18张图片

 

 

【数据结构】图解2-3树(学习红黑树、B树的基础)_第19张图片

【数据结构】图解2-3树(学习红黑树、B树的基础)_第20张图片

最后总结一下插入元素:1.如果待插入的元素对应的节点位置是一个2节点,则直接融合。

 

【数据结构】图解2-3树(学习红黑树、B树的基础)_第21张图片

                                        2.如果待插入的元素对应的节点位置是一个3节点,则先融合再调整 

                                           这里还存在两种情况①如果该3节点本身就是一个root根节点则就结束了

                                                                            ②如果该3节点不是root节点,而是一个叶子节点,则还需要再次调整。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第22张图片

        对于②的情况还分为两种情况,一种是父节点是一个2节点,另一种是父节点是一个3节点,首先来看一下父节点是2节点的情况解决方案。

【数据结构】图解2-3树(学习红黑树、B树的基础)_第23张图片

           再来看一下父节点是3节点的解决方案

【数据结构】图解2-3树(学习红黑树、B树的基础)_第24张图片

   2-3树的大致学习就到这里了,有了上面对2-3树的了解,再去学红黑树就会更加容易理解.

你可能感兴趣的:(数据结构与算法)