由于查找效率低的问题,我们引入了二叉查找树,但是在一些情况下,二叉查找树的深度过深,搜索算法向下搜索时就会遍历很多节点,减低查询的效率,基于这个思路,如果将二叉改为多叉的话,每个节点存储更多的IO信息,可以提高查询效率。
1.B树:可以理解为平衡多路查找树
一颗最小度为t的B树是满足如下四个条件的平衡多叉树:
每个节点最多包含(2t-1)个关键字;除根节点外的每个节点至少有(t-1)个关键字,跟节点至少有一个关键字;
一个节点u中的关键字按非降序排列:u.key1 ≤ u.key2 ≤ ...... ≤ u.keyn
每个节点的关键字对其子树进行范围分割
所有叶子节点具有相同的深度,即树的高度h。这表明B树是平衡的。平衡性其实是B树的名字来源,B正是单词Balanced
一颗标准的B树
树的高度:对于一个包含n个关键字的,最小度数t≥2的B树T,其高度满足
生成B树(t=2)0的例子:6 10 4 14 5 11 15 3 2 12 1 7 8 8
1)加入前三个元素时,会直接存在一个节点里面,在放入14时,由于B树的规则,每个节点不能多于2t-1个元素,因此需要进行转化
2)加入5和11的时候不会改变树的结构
3)添加15节点的时候,由于右子树中节点元素超过三,因此进行修改树
4)插入3节点,而后插入2节点
5)插入12节点
6)插入1节点
7)插入7节点
8)插入8节点
9)插入8节点
B树的生成可以近似为向上扩展,当叶子节点中的元素个数超过预期值后将节点转移给他的父节点,由父节点层层向上传递最后生成一颗新树,B树也是通过这种方法保证所有叶子节点在同一深度上