数据结构--B树(B- ,B+, B*)

1B-树

1.1概念

平衡的多路查找树 ,我们把树中结点最大的孩子数目称为B树的阶 通常记为m
在这里插入图片描述

1.2特性

一个m阶的B-树满足以下特性:

  • 书中每颗结点至多有m棵子树,至多有m-1个关键字
  • 若根节点不是终端结点,至少有2棵子树
  • 除根节点外的所有非叶子结点至少有[M/2](维护平衡的性质)棵子树(判断树根是否要分裂的关键)
  • 非叶子结点至少有[m/2]-1个关键字
  • 所有的叶子结点都出现在同一层次,就是最下面的空结点不存储信息为NULL,

1.3查找

  • 类似于2叉排序树

1.4插入

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

1.5删除

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

在这里插入图片描述

2B+树

在这里插入图片描述

2.1概念

  • 常用于数据库和操作系统的文件系统中的一份用于查找的数据结构

2.2特性

  • 具有n个关键字的结点只含有n棵子树,即每个关键字对应一颗子树;
  • 每个结点(非根内部结点)关键字个数n的范围是[M/2]<=n<=m,根节点1<=n<=m
  • 叶子结点包含信息,所有非叶子结点只能起到索引的作用,非叶子结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针不含有该关键字对应记录的存储地址
  • 叶子结点包含了全部的关键字,即在非叶子结点中出现的关键字也会出现在叶子结点中
  • 有一个指针指向关键字最小的叶子结点,把所有的叶子结点连成一个单链表

2.3B-树与B+树差异

在这里插入图片描述

3B*树

  • 是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针
    在这里插入图片描述

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

  • B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;

  • B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;