二叉树、平衡二叉树、红黑树、B树、B+树与B*树

1、二叉树

1️⃣二叉查找树的特色就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图:java

img

基于二叉查找树的这种特色,在查找某个节点的时候,能够采起相似于二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的状况下,查找的时间复杂度为 O(logN)。之因此说是正常状况下,是由于二叉查找树有可能出现一种极端的状况,例如:面试

img

这种状况也是知足二叉查找树的条件,然而,此时的二叉查找树已经近似退化为一条链表,这样的二叉查找树的查找时间复杂度顿时变成了 O(n)。由此必须防止这种状况发生,为了解决这个问题,因而引伸出了平衡二叉树。算法

2、平衡二叉树

1️⃣概念
平衡二叉树是基于二分法的策略提升数据的查找速度的二叉树的数据结构。sql

2️⃣规则
平衡二叉树是采用二分法思惟把数据按规则组装成一个树形结构的数据,用这个树形结构的数据减小无关数据的检索,大大的提高了数据检索的速度;平衡二叉树的数据结构组装过程有如下规则:
①非叶子节点只能容许最多两个子节点存在。
②每个非叶子节点数据分布规则为左边的子节点小当前节点的值,右边的子节点大于当前节点的值(这里值是基于本身的算法规则而定的,好比hash值)。数据库

img

平衡树的层级结构:平衡二叉树的查询性能和树的层级(高度h)成反比,h值越小查询越快。为了保证树的结构左右两端数据大体平衡。下降二叉树的查询难度通常会采用一种算法机制实现节点数据结构的平衡,实现了这种算法的有好比Treap、红黑树。使用平衡二叉树能保证数据的左右两边的节点层级相差不会大于1,经过这样避免树形结构因为删除增长变成线性链表影响查询效率,保证数据平衡的状况下查找数据的速度近于二分法查找:设计模式

img

3️⃣平衡二叉树特色:
①非叶子节点最多拥有两个子节点。
②非叶子节点值大于左边子节点、小于右边子节点。
③树的左右两边的层级数相差不会大于1。
④没有值相等重复的节点。缓存

3、红黑树

1️⃣为何有了平衡树还须要红黑树?
虽然平衡树解决了二叉查找树退化为近似链表的缺点,可以把查找时间控制在 O(logn),不过却不是最佳的,由于平衡树要求每一个节点的左子树和右子树的高度差至多等于1,这个要求实在是太严了,致使每次进行插入/删除节点的时候,几乎都会破坏平衡树的第二个规则,进而都须要经过左旋和右旋来进行调整,使之再次成为一颗符合要求的平衡树。数据结构

2️⃣红黑树的特性
显然,若是在插入、删除很频繁的场景中,平衡树须要频繁调整,这会使平衡树的性能大打折扣,为了解决这个问题,因而有了红黑树,红黑树具备以下特色:
①每一个节点或者是黑色,或者是红色。
②根节点是黑色。
③每一个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点]
④若是一个节点是红色的,则它的子节点必须是黑色的。
⑤从一个节点到该节点的子孙节点的全部路径上包含相同数目的黑节点。[这里指到叶子节点的路径]函数

包含n个内部节点的红黑树的高度是 O(log(n))。如图:性能

img

3️⃣红黑树的使用场景
java中使用到红黑树的有TreeSet和JDK1.8的HashMap。红黑树的插入和删除都要知足以上5个特性,操做很是复杂,为何要使用红黑树?缘由:
红黑树是一种平衡树,复杂的定义和规则都是为了保证树的平衡性。若是树不保证平衡性就是下图:很显然这就变成一个链表了。

img

保证平衡性的最大的目的就是下降树的高度,由于树的查找性能取决于树的高度。因此树的高度越低搜索的效率越高!

4、B树(B-tree)

B树和B-tree,实际上是同一种树。

1️⃣概念
B树和平衡二叉树稍有不一样的是B树属于多叉树又名平衡多路查找树(查找路径不仅两个),数据库索引技术里大量使用B树和B+树的数据结构。

2️⃣规则
①排序方式:全部节点关键字是按递增次序排列,并遵循左小右大原则。
②子节点数:非叶子节点的子节点数>1,且<=M ,且M>=2,空树除外(注:M阶表明一个树节点最多有多少个查找路径,M=M路,当M=2则是2叉树,M=3则是3叉)。
③关键字数:枝节点的关键字数量大于等于ceil(m/2)-1个且小于等于M-1个(注:ceil()是个朝正无穷方向取整的函数。如ceil(1.1)结果为2)。
④全部叶子节点均在同一层、叶子节点除了包含了关键字和关键字记录的指针外也有指向其子节点的指针只不过其指针地址都为null对应下图最后一层节点的空格子。

用一个图和一个实际的例子来理解B树(便于理解直接用实际字母的大小来排列C>B>A):

img

3️⃣B树的查询流程
如要从上图中找到E,查找流程以下:
①获取根节点的关键字进行比较,当前根节点关键字为M,E<M(26个字母顺序),因此往找到指向左边的子节点(二分法规则,左小右大,左边放小于当前节点值的子节点、右边放大于当前节点值的子节点)。
②拿到关键字D和G,D<E<G 因此直接找到D和G中间的节点。
③拿到E和F,由于E=E,因此直接返回关键字和指针信息(若是树结构里面没有包含所要查找的节点则返回null)。

4️⃣B树的插入节点流程
定义一个5阶树(平衡5路查找树),如今要把三、八、3一、十一、2三、2九、50、28这些数字构建出一个5阶树出来。遵循规则:
①节点拆分规则:当前是要组成一个5路查找树,那么此时m=5,关键字数必须<=5-1(这里关键字数>4就要进行节点拆分)。
②排序规则:知足节点自己比左边节点大,比右边节点小。

先插入 三、八、3一、11:

img

再插入2三、29:

img

再插入50、28:

img

5️⃣B树节点的删除

规则:
①节点合并规则:当前是要组成一个5路查找树,那么此时m=5,关键字数必须大于等于ceil(5/2)(这里关键字数<2就要进行节点合并)。
②知足节点自己比左边节点大,比右边节点小的排序规则。

③关键字数小于二时先从子节点取,子节点没有符合条件时就向父节点取,取中间值往父节点放。

img

特色:
B树相对于平衡二叉树的不一样是,每一个节点包含的关键字增多了,特别是在B树应用到数据库中的时候,数据库充分利用了磁盘块的原理(磁盘数据存储是采用块的形式存储的,每一个块的大小为4K,每次IO进行数据读取时,同一个磁盘块的数据能够一次性读取出来)把节点大小限制和充分使用在磁盘快大小范围;把树的节点关键字增多后树的层级比原来的二叉树少了,减小数据查找的次数和复杂度。

5、B+树

1️⃣概念
B+树是B树的一个升级版,B+树更充分的利用了节点的空间,让查询速度更加稳定,其速度彻底接近于二分法查找。为何说B+树查找的效率要比B树更高、更稳定?

2️⃣规则
①B+跟B树不一样。B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每一个非叶子节点所能保存的关键字大大增长。
②B+树叶子节点保存了父节点的全部关键字记录的指针,全部数据地址必需要到叶子节点才能获取到。因此每次数据查询的次数都同样。
③B+树叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针。
④非叶子节点的子节点数=关键字数(百度百科。根据各类资料,这里有两种算法的实现方式,另外一种为非叶节点的关键字数=子节点数-1(维基百科),虽然数据排列结构不同,但其原理仍是同样的。Mysql 的 B+树是用第一种方式实现)。

img

百度百科算法结构示意图

img

维基百科算法结构示意图

3️⃣特色
①B+树的层级更少:相较于B树B+每一个非叶子节点存储的关键字数更多,树的层级更少因此查询数据更快。
②B+树查询速度更稳定:B+全部关键字数据地址都存在叶子节点上,因此每次查找的次数都相同因此查询速度要比B树更稳定。
③B+树自然具有排序功能:B+树全部的叶子节点数据构成了一个有序链表,在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高。
④B+树全节点遍历更快:B+树遍历整棵树只须要遍历全部的叶子节点便可,而不须要像B树对每一层进行遍历,这有利于数据库作全表扫描。
⑤B树相对于B+树的优势是,若是常常访问的数据离根节点很近,而B树的非叶子节点自己存有关键字其数据的地址,因此这种数据检索的时候会要比B+树快。

6、B*树

1️⃣规则
B树是B+树的变种,区别以下:
①首先是关键字个数限制问题,B+树初始化的关键字初始化个数是cei(m/2),B
树的初始化个数为cei(2/3m)。
②B+树节点满时就会分裂,而B
树节点满时会检查兄弟节点是否满(由于每一个节点都有指向兄弟的指针),若是兄弟节点未满则向兄弟节点转移关键字,若是兄弟节点已满,则从当前节点和兄弟节点各拿出1/3的数据建立一个新的节点出来。

2️⃣特色
在B+树的基础上因其初始化的容量变大,使得节点空间使用率更高,而又存有兄弟节点的指针,能够向兄弟节点转移关键字的特性使得B*树额分解次数变得更少;

img

7、 总结

1️⃣相同思想和策略
从平衡二叉树、B树、B+树、B*树整体来看它们的贯彻的思想是相同的,都是采用二分法和数据平衡策略来提高查找数据的速度。

2️⃣不一样的方式的磁盘空间利用
不一样点是它们一个一个在演变的过程当中经过IO从磁盘读取数据的原理进行一步步的演变,每一次演变都是为了让节点的空间更合理的运用起来,从而使树的层级减小达到快速查找数据的目的。

做者:平常更新
连接:https://www.jianshu.com/p/b597aa97c9de

欢迎关注公众号 【码农开花】一块儿学习成长 我会一直分享Java干货,也会分享免费的学习资料课程和面试宝典 回复:【计算机】【设计模式】【面试】有惊喜哦

相关文章
相关标签/搜索