B-Tree,B+Tree

B-tree的B是balance的意思。是一种平衡树。是树的一种。

只要是平衡树就是每个节点高度一样。

B-Tree:只保证平衡即可,每个节点都是有效数据,比该节点小的节点走左边,比该节点大的节点走右边即可。

B-Tree,B+Tree(图片均为抄袭)

注:不一定非得采用链式结构,对创建后不用删除的临时数据,可将链式结构扁平化到连续的内存上。方便删除。

插入时,首先插进去,发现超过节点限制,将该节点平分为两个,提升一个向上移动,如果上一个也满了,就再平分,再向上。

优点:  1. 结构简单,便于理解。

            2. 适合单次查询方案。

            3. 顺序存储。

            4.如果查询有频率的话,将频率的节点放到近根的地方。是个很好的方法。

缺点:  1.空间利用率不大,对于大量数据集,存储成本增加。

            2.搜索效率不稳定。

B+tree

    B+树是B树的一种优化,可以拆解成索引和链表两种结构的结合。其中链表中保存数据(每个节点有n个数据,已排序),索引的叶节点是链表节点中的最大值和指向链表节点的一个指针。索引中只进行比较不存储数据。B+树结构如下图:

B-Tree,B+Tree

插入:B的插入法,叶子节点也有可能插入。比如插入14的话,两种:第一直接插入。这样查询有些不平衡。第二,插入14后,看左右节点有没有空闲的位置(双向链表),有位置的话,将小数向左放,大数向右方。如果左右都满,新开辟节点存放。

优点:1. 方便遍历。方便取范围数。(直接遍历,不用再去非叶节点了)

          2. 空间利用率比B树稍微高一点吧。