1. 程式人生 > 實用技巧 >二叉樹和B樹的簡單介紹

二叉樹和B樹的簡單介紹

1、二叉查詢樹
  特點:左子樹的鍵值小於根節點的鍵值,右子樹的節點大於根節點的鍵值。
  示例:
在這裡插入圖片描述

   缺點:如果存放的值一直大於根節點的值,就會造成樹的不平衡,導致查詢效率低下。
在這裡插入圖片描述

2、平衡二叉樹
特點:在符合二叉查詢樹的條件下,還滿足任何節點的兩個子樹節點的高度差小於等於1.
在這裡插入圖片描述

3、B-tree:平衡多路查詢樹。一棵m階的B-tree的特徵如下:
  1、樹中的每個節點最多有m個孩子。
  2、除根節點和葉子結點外,其他每個結點至少有cell(m/2)個孩子。
  3、若根節點不是葉子結點,則至少有兩個孩子。
  4、所有葉子結點都出現在同一層,葉子結點不包含任何關鍵字資訊。
  5、每個非終端結點中包含有n個關鍵字資訊 (n,P0,K1,P1,K2,P2,…,Kn,Pn)。其中:

     a) Ki (i=1…n)為關鍵字,且關鍵字按順序排序K(i-1)< Ki。
     b) Pi為指向子樹根的結點,且指標P(i-1)指向子樹中所有結點的關鍵字均小於Ki,但都大於K(i-1)。
     c) 關鍵字的個數n必須滿足: ceil(m / 2)-1 <= n <= m-1。

其中17表示一個磁碟檔案的檔名;小紅方塊表示這個17檔案的內容在硬碟中的儲存位置;p1表示指向17左子樹的指標。
在這裡插入圖片描述

4、B±tree:b+樹,是應檔案系統所需而產生的一種B-tree的變形樹。
  一棵m階的b+樹和b-tree的差異:
  1、有n子樹的結點中含有n個關鍵字(B-tree是n棵子樹有n-1個關鍵字)

  2、所有的葉子結點中包含了全部關鍵字的資訊及指向含有這些關鍵字記錄的指標,且葉子結點本身依關鍵字的大小自小而大的順序連線。(B-tree的葉子結點並沒有包括全部需要查詢的資訊)
  3、所有非終端結點可以看成是索引部分,結點中僅含有其樹結點中最大或最小的關鍵字。(B-tree的非終端結點包含了需要查詢的有效資訊)
在這裡插入圖片描述

5、B*-tree:B*-tree是B±tree的變體,在B±tree的非根和非葉子結點再增加指向兄弟的指標;B*-tree定義了非葉子結點關鍵字個數至少為(2/3)*M,即塊的最低使用率為2/3(代替B+樹的1/2)。
在這裡插入圖片描述

  B+ -tree的分裂:當一個結點滿時,分配一個新的結點,並將原結點中1/2的資料複製到新結點,最後在父結點中增加新結點的指標;B±tree的分裂隻影響原結點和父結點,而不會影響兄弟結點,所以它不需要指向兄弟的指標。

  B*-tree的分裂:當一個結點滿時,如果它的下一個兄弟結點未滿,那麼將一部分資料移到兄弟結點中,再在原結點插入關鍵字,最後修改父結點中兄弟結點的關鍵字(因為兄弟結點的關鍵字範圍改變了);如果兄弟也滿了,則在原結點與兄弟結點之間增加新結點,並各複製1/3的資料到新結點,最後在父結點增加新結點的指標。
所以,B*-tree分配新結點的概率比B±tree要低,空間使用率更高;