紅黑樹的性質
性質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、平衡二叉樹追求絕對平衡,條件比較苛刻,實現起來比較麻煩,每次插入新節點之后需要旋轉的次數不能預知。