B树总结

 B树是一种平衡的多路查找树,一棵m阶B树或为空树,或满足下列特性:

1、  每个节点之多有m棵子树

2、  若根节点不是叶子节点,则至少有两颗子树

3、  除根之外所有非终端节点至少有[m/2]可子树([]是上取整)

4、  所有非终端节点中包含下列信息数据:(n,A0,K1,A1,K2,A2,….,Kn,An),其中n为关键码数目,ki均为关键码,Ai为指向子树的指针,Ai中的所有关键码均在区间[ki,ki+1]中。

5、  所有终端节点均在同一层次,可将终端节点的的下一层成为叶子节点或失败节点,查找到叶子节点意味着查找失败

 

对于m阶B树

简单口诀:插入时,多了就分;删除时,不够就借,借不到就合

解释:插入时,当一个节点的关键码数目等于m时则分裂,选取中间的关键码上升为父节点中的一个关键码,其余的左右两侧分别作为其左右子树,由于父节点关键码数目增加,若有需要向上递归解决;

注意:新插入的关键码必然是从叶子节点开始,分裂也是从叶子节点开始

 

删除一个关键码,有两种情形:

情形一:关键码所在节点不是叶子节点,找到关键码的后继节点x来替换,x必然属于叶子节点,现在问题成了删除叶子节点x了,参考情形二。

情形二:待删除的关键码x属于叶子节点,若x是根节点,直接删除;x不是根节点,当关键码数量n大于[m/2]-1,直接删除; 若n等于[m/2]-1,则向左右兄弟借,如果左右兄弟的关键码数目有一个大于[m/2]-1,则借其一个;如果左右兄弟的关键码数目均等于[m/2]-1, 选择一个合并,父节点中的一个关键码也下降到合并节点中了,此时父节点关键码数目减少,递归解决;

 

性能分析:令 a=[m/2], 高度为h的B树最少节点数目为

1 + 2* { (a-1) + (a-1)a + (a-1)a^2 + …(a-1)a^(h-2) } = 2a^(h-1) -1 = 2[m/2]^(h-1)

最多节点数目为 (m-1) + (m-1)*m +(m-1)*m^1 + … + (m-1)*m^(h-1) =  m^h -1;

查找复杂即为其高度大约为 以a为底n的对数,n为节点数目,按照最大高度计算;

 

B+树,与B树不同之处:

(1)       所有关键码都存放在叶子节点

(2)       有n棵子树的节点有n个关键码

(3)       上层的关键码复写到对应子树,作为最大(最小)关键码

其他不同之处:

B+树有两个头指针,一个纸箱B+树的根节点,一个指向关键码最小的叶节点,因此在B+树上可以进行树搜索和顺序搜索,在树搜索过程中,如果非叶节点上的关键码等于给定值,搜索并不定制,而是继续沿右指针向下一直到叶节点上的关键码;

B+树插入和删除只在叶节点进行,合并和分裂与B树相同,注意更新关键码,删除时上层副本可以保留作为“分界关键码”

 

 

posted on 2015-03-01 23:17  gaoyanqing  阅读(1235)  评论(0编辑  收藏  举报

导航