【数据结构】二叉搜索树、平衡树、红黑树、B树和B+树深入浅出


红黑树和B树、B+树这些数据结构上学时不是重点,但是在很多地方用处较多。面试也经常被问到。

参考文章

  1. 程序员小灰-红黑树
  2. 程序员小灰-B树
  3. 程序员小灰-B+树

二叉搜索树

二叉查找树(BST)具备什么特性呢?

1.左子树上所有结点的值均小于或等于它的根结点的值。

2.右子树上所有结点的值均大于或等于它的根结点的值。

3.左、右子树也分别为二叉排序树。

下图中这棵树,就是一颗典型的二叉查找树:
在这里插入图片描述
对二叉排序树进行中序遍历可以得到一个递增的有序序列。
二叉排序树的查找过程类似于二分查找。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小灰说的上面这句话是重点。查找所需的最大次数等同于查找树的高度。
方便进行二分查找。

但是二叉搜索树也有缺陷,缺陷体现在插入节点的时候。
在这里插入图片描述
假设初始的二叉查找树只有三个节点,根节点值为9,左孩子值为8,右孩子值为12:

在这里插入图片描述
接下来我们依次插入如下五个节点:7,6,5,4,3。依照二叉查找树的特性,结果会变成什么样呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二叉搜索树的缺点在于多次插入新节点后导致不平衡,失去了二分查找的性质。

这时候引入红黑树来解决这个问题。

平衡二叉树

这里插播一下平衡二叉树。

为了避免树的高度增长过快,降低二叉排序树的性能,我们规定在插入和删除二叉树的节点的时候。要保证任意节点的左、右子树的高度差的绝对值不超过1。

红黑树

在这里插入图片描述
红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是RED或BLACK。
通过对任何一棵从根到叶子的简单路径上各个节点的颜色进行约束,红黑树可以确保没有一条路径会比其他路径长出2倍,因而是近似于平衡的。
在这里插入图片描述
需要了解特性和优势。变色和旋转。
在这里插入图片描述
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点(NIL节点)。
4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5**.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点**。

在这里插入图片描述
在这里插入图片描述
什么情况下会破坏红黑树的规则,什么情况下不会破坏规则呢?我们举两个简单的栗子:

1.向原红黑树插入值为14的新节点:
在这里插入图片描述
由于父节点15是黑色节点,因此这种情况并不会破坏红黑树的规则,无需做任何调整。

2.向原红黑树插入值为21的新节点:
在这里插入图片描述
由于父节点22是红色节点,因此这种情况打破了红黑树的规则4(每个红色节点的两个子节点都是黑色),必须进行调整,使之重新符合红黑树的规则。

在这里插入图片描述
这里是红黑树的重点,调整分为变色和选择 旋转分为左旋转和右旋转。
在这里插入图片描述

B树

在这里插入图片描述
真的是这样,每次面试都会问索引。然后再问到B+树和B树。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
树的查询效率高,而且可以保持有序。
在这里插入图片描述
二叉排序树的查询时间复杂度已经是O(log N)。性能足够高了。但是还不明白为什么不用二叉查找树。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到磁盘IO的次数为4。说明磁盘IO的次数取决于索引树的高度。

既然如此,那么我们就需要把原本瘦高的树结构变得矮胖。这就是B树的特征之1。
在这里插入图片描述
上个这个是重点。
B树是一种多路平衡查找树,每一个节点最多包含k个孩子。k称为B树的阶。k的大小取决于磁盘页的大小。

下面来具体介绍一下B-树(Balance Tree)

一个m阶的B树具有如下几个特征:

  1. 根结点至少有两个子女。
  2. 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
  3. 每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
  4. 所有的叶子结点都位于同一层
  5. 每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第1次磁盘IO:
和9比较
在这里插入图片描述
第2次磁盘IO:
在这里插入图片描述
第3次磁盘IO:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

B树与二叉搜索树的优势在于,降低了树的高度。从而降低了磁盘的IO次数。

B+树

B+ 树是B树的一种变种,有着比B树更高的查询性能。

首先回顾下B树的特征

一个m阶的B树具有如下几个特征:

1.根结点至少有两个子女。
2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

一个m阶的B+树具有如下几个特征:

1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点.
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

下面展示一个B+树
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
卫星数据
在这里插入图片描述

好处

在这里插入图片描述
B树与B+树的两点不同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

B+树的特征:

1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。

2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。

3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

B+树的优势:

1.单一节点存储更多的元素,使得查询的IO次数更少。

2.所有查询都要查找到叶子节点,查询性能稳定。

3.所有叶子节点形成有序链表,便于范围查询。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值