一、为什么要有B树
查找速率比较高。
CPU速度>>内存速度>>磁盘速度
硬盘有一个特点,读取含有多个数据的节点和单个数据的节点耗时是一样的。
二、B树(又称B-树)
B-树,又称多路平衡查找树。
1. m阶B树定义如下:
1)每个节点最多m-1个关键字
2)根结点最少可以只有1个关键字
3)非根节点至少有cell(m/2)-1个关键字
4)每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树的所有关键字都小于它,而右子树中的所有关键字大于它。
叶子节点的称呼比较不一样,这里是内部节点最后一层为叶子节点。有些地方时以外部节点为叶子节点。
2. B树的插入
B树的插入一般有2种方法。一种回溯法,另一种主动插入法。 这里讲的是回溯法。
2.1回溯法插入
[B树画图链接](B-Tree Visualization)
口诀:溢出,分裂,上移。(上移的是中间元素)
插入的元素:2、 4、 1、 6、 67
插入1后,不满足m-1的定义,溢出了。所以,2与1和4分裂,中间的2上移。
插入6,6大于2,6小于4,所以放进了4的右边,且满足m-1的定义。
插入67后,不满足m-1的定义,溢出了。所以,6与4和67分裂,中间的6大于2,则上移到2的右边。
3.B树的删除 (所有非叶子节点都会替换成叶子节点删除)
3.1删除叶子节点无下溢出
直接删除。
3.2下溢出
当键数小于最小值,则向其兄弟节点借元素。即其父节点元素下移至当前节点,将兄弟节点中元素上移至父节点(若是左节点,上移最大元素;若是右节点,上移最小元素)
若兄弟节点也达下限,则合并兄弟节点与分割键。