平衡二叉樹、B樹、B+樹、B*樹入門
阿新 • • 發佈:2018-12-25
學習自
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*樹額分解次數變得更少。