本文详细讲解B树、B-树、B+树、B*树的原理,通过参照网络资源整理编写
1. B树
B树也就是最基本的二叉搜索树,只不过换了个名字而已。每个非叶子节点最多只能存放两个孩子,其中节点的左孩子一定比该节点小,右孩子一定比该节点大,搜索节点在时间效率上是与二分查找是等价的(根节点左右孩子总数目差不多的情况下)。它与二分查找的优点是,在进行增删操作时,不需要移动大段的内存数据,通常是常数开销。
2. B-树
性质:是一种多路搜索树(非二叉结构):
1.任意非叶子节点最多有M个孩子,且M>2;
2.根节点孩子数为[2,M]个;
3.除根节点外的非叶子结点孩子树没[M/2, M];
4.每个节点存放至少M/2-1(取上整)和至多M-1个关键字,至少两个关键字;
5.非叶子结点关键字数 = 指向孩子们的指针数 – 1
6.左右叶子节点位于同一层
7.每个非叶子结点的指针下孩子们的取值范围在该节点的数值范围区间内(后面详细阐述)
如图为一个B-树:
下面简单解释一下第7条是怎么回事,其实有点像二叉树的形式,我们看第二层第一个节点,P1指针下的孩子们的数值范围在<8,P2孩子们的数值范围在(8,12),P3孩子们在(12,26)
搜索有可能在非叶子结点结束,并且性能等价于二分查找,不同于B树的根节点是否平衡的情况
3. B+树
B+树与B-树大体相同,除了:
1.非叶子结点的子树指针树和关键字个数相同;
2.非叶子结点孩子范围是[ )区间;
3.为所有叶子节点增加链指针;
4.所有关键字都在叶子节点出现;
5.搜索只有在叶子节点才能结束,不能在非叶子节点结束。
如图所示:
其特性是更加适合文件索引系统。