二叉樹、B樹、B+樹、B*樹、VAL樹、紅黑樹


二叉搜索樹

每個節點只存儲一個關鍵字,
每個節點最多有兩個子節點,
左子節點存儲的關鍵字小於本節點存儲的關鍵字
右子節點存儲的關鍵字大於本節點存儲的關鍵字
搜索時,從根節點開始搜索,小於走左結點,大於走右結點,等於則命中;

平衡二叉樹

在原二叉搜索樹的基礎上加上平衡算法,即為平衡二叉樹

平衡算法

平衡算法是一種在二叉搜索樹中插入節點和刪除結點時對樹調整的策略

B樹(即B-樹)

它是多路搜索樹(二叉樹每個節點最多只有兩個子節點,多路搜索樹沒有這個限制)
非葉子節點,既放了n個關鍵字,又放了(n+1)個指向子節點的指針
根節點的子節點數為[2, M],其他節點的子節點數為[M/2, M]
所有關鍵字在整顆樹中出現,且只出現一次,非葉子結點可以命中
所有葉子結點位於同一層

B+樹

是對B樹的優化
為葉子結點增加鏈表指針,所有關鍵字都在葉子結點中出現,非葉子結點作為葉子結點的索引;B+樹總是到葉子結點才命中;
非葉子結點相當於是葉子結點的索引,葉子結點相當於是存儲(關鍵字)數據的數據層;
由於數據都從非葉子節點轉移到了葉子節點,所以每個非葉子節點能容納的索引指針就會更多,從而減少了樹的層級

B * 樹

是對B+樹的優化
在B+樹的非根和非葉子結點再增加指向兄弟的指針;將結點的最低利用率從1/2提高到2/3;

1、B+樹的分裂

當一個結點滿時,分配一個新的結點,並將原結點中1/2的數據
復制到新結點,最后在父結點中增加新結點的指針;B+樹的分裂只影響原結點和父
結點,而不會影響兄弟結點,所以它不需要指向兄弟的指針;

2、B * 樹的分裂

當一個結點滿時,如果它的下一個兄弟結點未滿,那么將一部分
數據移到兄弟結點中,再在原結點插入關鍵字,最后修改父結點中兄弟結點的關鍵字;
如果兄弟也滿了,則在原結點與兄弟結點之
間增加新結點,並各復制1/3的數據到新結點,最后在父結點增加新結點的指針

AVL樹

帶有平強衡條件的二叉查找樹,所有節點的左右子樹樹高不超過1,
和紅黑樹相比,AVL樹是嚴格的平衡二叉樹,平衡條件必須滿足
不管我們是執行插入還是刪除操作,只要不滿足上面的條件,就要通過旋轉來保持平衡,
而它的英文旋轉非常耗時的,由此我們可以知道AVL樹適合用於插入與刪除次數比較少,但查找多的情況

紅黑樹

帶有平弱平衡條件的二叉查找樹,在每個節點都帶有顏色,可以是紅或黑(非紅即黑)。
紅黑樹確保沒有一條路徑會比其它路徑長出兩倍,因此,紅黑樹是一種弱平衡二叉樹
相對於要求嚴格的AVL來說,它的旋轉次數少,所以對於搜索,插入,刪除操作較多的情況下,我們就用紅黑樹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM