二叉樹和B樹的簡單介紹
阿新 • • 發佈:2020-10-13
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)。其中:
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個關鍵字)
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分配新結點的概率比B±tree要低,空間使用率更高;