紅黑樹與平衡二叉樹


紅黑樹的性質

性質1.節點是紅色或黑色。

性質2.根節點是黑色。

性質3.每個葉子節點都是黑色的空節點(NIL節點)。

性質4 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)

性質5.從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

這些約束強制了紅黑樹的關鍵性質: 從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長。結果是這個樹大致上是平衡的。因為操作比如插入、刪除和查找某個值的最壞情況時間都要求與樹的高度成比例,這個在高度上的理論上限允許紅黑樹在最壞情況下都是高效的,而不同於普通的二叉查找樹。

 旋轉和顏色變化規則

1、添加的節點必須為紅色

2、變色的情況:當前結點的父親是紅色,且它的叔結點也是紅色

  2.1 把父節點設置為黑色

  2.2 把叔節點設置為黑色

  2.3 把祖父節點設置為紅色

  2.4 把當前指針定義到祖父節點,設為當前要操作的

3、左旋的情況:當前父節點是紅色,叔節點是黑色,且當前的節點是右子樹

  3.1 以父節點作為左旋。

4、右旋的情況:當前父節點是紅色,叔節點是黑色,且當前的節點是左子樹

  4.1 把父節點變成黑色

  4.2 把祖父節點變為紅色

  4.3 以祖父節點右旋轉

平衡二叉樹(AVL)的性質 

它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。這個方案很好的解決了二叉查找樹退化成鏈表的問題,把插入,查找,刪除的時間復雜度最好情況和最壞情況都維持在O(logN)。但是頻繁旋轉會使插入和刪除犧牲掉O(logN)左右的時間,不過相對二叉查找樹來說,時間上穩定了很多。

區別: 

1、紅黑樹放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的時間復雜度相差不大的情況下,保證每次插入最多只需要三次旋轉就能達到平衡,實現起來也更為簡單。

2、平衡二叉樹追求絕對平衡,條件比較苛刻,實現起來比較麻煩,每次插入新節點之后需要旋轉的次數不能預知。


免責聲明!

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



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