浅谈数据结构中的树(B/B+/B-/B*)

一、B树(二叉搜索树)

1、所有非叶子节点至多拥有两个儿子。

2、所有节点存储一个关键字。

3、左孩子小于父节点,右孩子大于父节点。

《浅谈数据结构中的树(B/B+/B-/B*)》

二、B-树(多路搜索树)

1、定义任意多个非叶子节点最多只有M个孩子

2、根节点的儿子数【2,M】

3、除根节点之外的非叶子节点的孩子数【M/2,M】

4,每个节点至少存放M/2-1(向上取整),和至多M-1个关键字(至少2个)

5、非叶子节点的关键字个数=所指向的孩子数-1;

6、非叶子节点的关键字K[i]<K[i+1]

7、非叶子节点的指针P[1]/P[2]…指向的关键字小于K[i]的子树,P[m]指向的关键字大于K[m-1]

8、所有叶子节点位于同一层

《浅谈数据结构中的树(B/B+/B-/B*)》

B-树的搜索从根节点开始,对节点内的关键字有序序列进行二分查找,命中则返回,否则查找关键字的儿子节点,直到儿子节点为空,或者为叶子节点。

B-树的特性:

1、关键字集合分布在整棵树中

2、任何一个关键字出现且只出现在一个节点中

3、搜索有可能在非叶子节点结束

4、其搜索性能等价于在关键字集合中做了一次二分查找

5、自动层次控制,B-树的性能总是等价于二分查找;但是由于M/2的限值,再插入节点时如果节点已满,需要将节点       分裂为两个各占M/2的节点,再删除节点时,需要将两个不足M/2的节点合并。

三、B+树(多路搜索树)

1、定义与B-树相同除了

2、非叶子节点的指针数与关键字数量相同

3、非叶子节点的子树指针P[i]指向关键字属于[P[i],P[i+1]]的子树(B-树是开区间的)

4、为所有叶子节点增加一个链指针

5、所有关键字都在叶子节点出现

《浅谈数据结构中的树(B/B+/B-/B*)》

B+树只有达到叶子节点才命中,也等价于在关键字全集做一次二分查找。

特点:

1、所有关键字都出现在叶子节点的链表中,且来拿表中的关键字恰好是有序的

2、不可能在非叶子节点命中

3、非叶子节点相当于是叶子节点的索引,叶子节点相当于是存储关键字的数据层。

4、更适合文件索引系统

四、B*树

是B+树的变体,在B+树的非根和非叶子节点增加指向的兄弟的指针。

《浅谈数据结构中的树(B/B+/B-/B*)》

B*树定义了非叶子节点的关键字个数至少为(2/3)M

B+树的分裂:当一个节点满时分配一个新节点,将原节点1/2的数据复制到新节点,最后在父节点中增加新结点的指针。B+树的分裂只影响源节点和父节点,不会影响兄弟节点,所以不需要指向兄弟的指针。

B*树的分裂:当一个节点满时,如果兄弟节点未满,把他的一部分数据移到兄弟节点,再在原节点中插入关键字,最后在父节点中修改兄弟节点的关键字。如果兄弟节点满了,则在原节点和兄弟节点中间插入新节点,并且各复制1/3数据到兄弟节点,最后在父节点增加新节点的指针。(将节点最低利用了从二分之一提高到三分之二)

五、红黑树

          是一种平衡二叉查找树

      1、性质

         (1)节点是红色或者黑色

         (2)根节点是黑色

         (3)每个叶节点都是黑色

         (4)每个红色节点的子节点都是黑色

         (5)任意叶节点路径上的黑色节点相等

《浅谈数据结构中的树(B/B+/B-/B*)》

    原文作者:B树
    原文地址: https://blog.csdn.net/xiaolaohu_zy/article/details/78049942
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞