学习B树

三个问题:(1)B树是满足什么要求的树;(2)如何插入;(3)如何删除

(1)B树是满足什么要求的树,三个要求:

    1、B树有一个唯一的参数:最小度数,设t为某B树的小度数;

    2、B树的每一个结点至少需要有t-1个关键字;

    3、B树的每一个结点至多有2t-1个关键字;

    备注:根节点可以少于t-1个关键字;

    解释:结点的关键字树限制非常巧妙,可以完美配合它的插入和删除策略,比如:

      一:删除一个内结点中的关键字,其子女之和的范围在[2t-2, 4t-2],当在[2t-2, 2t-1]时则合并,能满足要求,当子女之和在[2t, 4t-2]时则分裂,能满足要求;

      二:插入一个结点的关键字时,该结点的关键字数在[t-1, 2t-1],当满度时,为2t-1则分裂为t-1和t-1和1个上升的关键字,总数仍为:2t-1,两个t-1正好满足要求;

      三:续二,巧妙的是,那个上升的关键字并不会导致上面的结点分裂,因为上面的结点不满(满的话早就分了),因次上面的关键字数小于2t-1,加上这个关键字,则小于等于2t-1,能满足要求;

(2)B树的插入:

    1、途经的每一个结点,如果满了(等于2t-1),则分裂,保证没有一个内结点是满的,从而可以接受下面上升的关键字;

    2、插入过程一直搜索到叶子,如果叶子超过2t-1了,则叶子分裂,并上升一个关键字,这个上升的关键字,不会导致上面的结点分裂,因为上边不满;

(3)B树的删除:

    1、途经的每一个结点,如果贫了(等于t-1),则能找个相邻的兄弟合并就合并,如果不能合并(兄弟都大于t),向父结点要关键字,父结点再向兄弟结点要,保证没有一个内结点是贫的,从而保证可以提供下降的关键字;

(4)会不会因为插入和删除导致树歪了:

    不会特别歪,因为插入满了就平均分裂,一分裂就平衡了;删除贫了则合并或者向兄弟要;最终,两边都满足[t-1, 2t-1]不会差距太大。

posted @ 2013-09-17 23:58  铁甲小宝  阅读(300)  评论(0编辑  收藏  举报