【轉】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時,這個移動不能進行。這種情況下,要把將刪除關鍵碼的結點,它的兄弟結點及它們的父結點中的一個關鍵碼合並為一個結點。

 

例題 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM