前言
动态查找树有多种,二叉查找树、平衡二叉查找树、红黑树等。这些树的时间复杂度都为O(log2H),和树的深度有关,所以减小树的深度就可以提升查找的性能。由此就诞生了B树。
定义
B树,又称平衡多叉查找树。对于一个m阶的B树它必须满足以下一些特性:
- 每个节点最多只能存在m个子节点(或是子树)。
- 每个非叶子节点(根节点除外),都至少有ceil[m/2]个子节点(或是子树)。
- 根节点如果是非叶子节点,那它至少存在2个子节点(或是子树)。
- 非叶子节点如果存在k个子节点(或是子树),那么它就包含k-1个key。
- 所有叶子出现在同一层。
每个非叶子节点的key都充当分割值,将其子树分开。图中7、16就是两个key,将子树分割成了三块(<7、7<x<16、>16)。
查找
B树的查找类似与二叉查找树,从根节点自上而下的递归查询,在每一层上都按照key的大小来查找自己想要的子树。一般地,会在查找key的子树时使用二分查找法来提高性能。
插入
所有的插入都是从叶子节点开始的,必须先搜索树,查找到新节点应该插入的叶子节点,并将