淺談資料結構中的樹(B/B+/B-/B*)
一、B樹(二叉搜尋樹)
1、所有非葉子節點至多擁有兩個兒子。
2、所有節點儲存一個關鍵字。
3、左孩子小於父節點,右孩子大於父節點。
1、定義任意多個非葉子節點最多隻有M個孩子
2、根節點的兒子數【2,M】
3、除根節點之外的非葉子節點的孩子數【M/2,M】
4,每個節點至少存放M/2-1(向上取整),和至多M-1個關鍵字(至少2個)
5、非葉子節點的關鍵字個數=所指向的孩子數-1;
6、非葉子節點的關鍵字K[i]<K[i+1]
7、非葉子節點的指標P[1]/P[2]...指向的關鍵字小於K[i]的子樹,P[m]指向的關鍵字大於K[m-1]
8、所有葉子節點位於同一層
B-樹的搜尋從根節點開始,對節點內的關鍵字有序序列進行二分查詢,命中則返回,否則查詢關鍵字的兒子節點,直到兒子節點為空,或者為葉子節點。
B-樹的特性:
1、關鍵字集合分佈在整棵樹中
2、任何一個關鍵字出現且只出現在一個節點中
3、搜尋有可能在非葉子節點結束
4、其搜尋效能等價於在關鍵字集合中做了一次二分查詢
5、自動層次控制,B-樹的效能總是等價於二分查詢;但是由於M/2的限值,再插入節點時如果節點已滿,需要將節點 分裂為兩個各佔M/2的節點,再刪除節點時,需要將兩個不足M/2的節點合併。
三、B+樹(多路搜尋樹)
1、定義與B-樹相同除了
2、非葉子節點的指標數與關鍵字數量相同
3、非葉子節點的子樹指標P[i]指向關鍵字屬於[P[i],P[i+1]]的子樹(B-樹是開區間的)
4、為所有葉子節點增加一個鏈指標
5、所有關鍵字都在葉子節點出現
B+樹只有達到葉子節點才命中,也等價於在關鍵字全集做一次二分查詢。
特點:
1、所有關鍵字都出現在葉子節點的連結串列中,且來拿表中的關鍵字恰好是有序的
2、不可能在非葉子節點命中
3、非葉子節點相當於是葉子節點的索引,葉子節點相當於是儲存關鍵字的資料層。
4、更適合檔案索引系統
四、B*樹
是B+樹的變體,在B+樹的非根和非葉子節點增加指向的兄弟的指標。
B*樹定義了非葉子節點的關鍵字個數至少為(2/3)M
B+樹的分裂:當一個節點滿時分配一個新節點,將原節點1/2的資料複製到新節點,最後在父節點中增加新結點的指標。B+樹的分裂隻影響源節點和父節點,不會影響兄弟節點,所以不需要指向兄弟的指標。
B*樹的分裂:當一個節點滿時,如果兄弟節點未滿,把他的一部分資料移到兄弟節點,再在原節點中插入關鍵字,最後在父節點中修改兄弟節點的關鍵字。如果兄弟節點滿了,則在原節點和兄弟節點中間插入新節點,並且各複製1/3資料到兄弟節點,最後在父節點增加新節點的指標。(將節點最低利用了從二分之一提高到三分之二)
五、紅黑樹
是一種平衡二叉查詢樹
1、性質
(1)節點是紅色或者黑色
(2)根節點是黑色
(3)每個葉節點都是黑色
(4)每個紅色節點的子節點都是黑色
(5)任意葉節點路徑上的黑色節點相等