1. 程式人生 > >平衡二叉樹、B樹、B+樹、B*樹入門

平衡二叉樹、B樹、B+樹、B*樹入門

學習自

https://zhuanlan.zhihu.com/p/27700617

平衡二叉樹

B樹

(圖中示例為m=3階)

每個節點(除了根節點)有:2<=k<=m個子節點
關鍵字?

葉子節點都在同一層

如果一個非葉節點有n個子節點,那麼這個非葉節點存放的關鍵字數有n-1個。

3、8、31、11、23、29、50、28怎麼構建出一個5階樹呢?

關鍵字數:3<=k<=4

一旦關鍵字數小於3就要進行合併,關鍵字數大於4就要進行拆分


最後的這個合併,其實是先進行右下角的5個的拆分,拆分成

這種形式,但是不滿足非根節點的關鍵字數目限制,然後就向上合併了。

刪除

關鍵字數小於二時先從子節點取,子節點沒有符合條件時就向向父節點取,取中間值往父節點放

 

B+樹

比之B樹的優點:

1.更穩定

2.查詢效率更高,充分地利用了節點的空間

 

葉子節點存放所有的關鍵字及關鍵字記錄的指標(也就是我們存放的資料)。

所有父節點,都只是存放孩子的索引,並非關鍵字指標。所以父節點的作用就是讓你正確地找到孩子。

B*樹

他是B+樹的變種,但是

1.B*樹的關鍵字個數最小為 2/3m向上取整

2. B*樹節點滿時會檢查兄弟節點是否滿(因為每個節點都有指向兄弟的指標),如果兄弟節點未滿則向兄弟節點轉移關鍵字,如果兄弟節點已滿,則從當前節點和兄弟節點各拿出1/3的資料建立一個新的節點出來。向兄弟節點轉移關鍵字的特性使得B*樹額分解次數變得更少。