【转】B树的插入和删除

一、B树

1、B树的定义 
    B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件: 
    (1)每个结点至多有m个子结点; 
    (2)每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1; 
    (3)若根结点不是叶子结点,则至少有两个子结点; 
    (4)所有的叶结点在同一层; 
    (5)有k个子结点的非根结点恰好包含k-1个关键码。

2、B树的查找 
    B树上的查找是一个顺指针查找结点和在结点内的关键码中查找交叉进行的过程。从根结点开始,在结点包含的关键码中查找给定的关键码,找到则查找成功;否则确定给定关键码可能在的子树,重复上面的操作,直到查找成功或者指针为空为止。 
    下图显示了在B树中查找关键码21的过程。 

B树插入删除 <wbr>例题

 

3、B树的插入 
    首先是在恰当的叶子结点中添加关键码,如果该结点中关键码不超过m-1个,则插入成功。否则要把这个结点分裂为两个。并把中间的一个关键码拿出来插到结点的父结点里去。父结点也可能是满的,就需要再分裂,再往上插。最坏的情况,这个过程可能一直传到根,如果需要分裂根,由于根是没有父结点的,这时就建立一个新的根结点。插入可能导致B树朝着根的方向生长。 
    下图显示了在B树中插入关键码33的过程。 

B树插入删除 <wbr>例题

 

4、B树的删除 
    B树中的删除操作与插入操作类似,但要稍微复杂些。如果删除的关键码不在叶结点层,则先把此关键码与它在B树里的后继对换位置,然后再删除该关键码。如果删除的关键码在叶结点层,则把它从它所在的结点里去掉,这可能导致此结点所包含的关键码的个数小于 -1。这种情况下,考察该结点的左或右兄弟,从兄弟结点移若干个关键码到该结点中来(这也涉及到它们的父结点中的一个关键码要做相应变化),使两个结点所含关键码个数基本相同。只有在兄弟结点的关键码个数也很少,刚好等于 -1时,这个移动不能进行。这种情况下,要把将删除关键码的结点,它的兄弟结点及它们的父结点中的一个关键码合并为一个结点。

 

例题 

 

posted @ 2012-08-22 16:57  Jack204  阅读(6116)  评论(1编辑  收藏  举报