概述
紅黑樹的左旋和右旋比較費解,網上很多資料說的很復雜,這里我用望文生義的思維來解釋左旋和右旋。可能對搜索資料的網友有幫助。
二叉查找樹的定義
二叉查找樹是一棵空樹,或者是具有下列性質的二叉樹:
1、若左子樹不空,則左子樹上所有節點的值均小於它的根節點的值;
2、若右子樹不空,則右子樹上所有節點的值均大於它的根節點的值;
3、左、右子樹也分別為二叉排序樹;
4、沒有鍵值相等的節點。
紅黑樹的定義
什么是紅黑樹?
紅黑樹(英語:Red–black tree)是一種不平衡二叉查找樹,
無需保證左右子樹高度差小於等於1。
是在計算機科學中用到的一種數據結構,典型的用途是實現關聯數組。
它在1972年由魯道夫·貝爾發明,被稱為"對稱二叉B樹",
它現代的名字源於Leo J.Guibas和RobertSedgewick於1978年寫的一篇論文。
紅黑樹的結構復雜,但它的操作有着良好的最壞情況運行時間,
並且在實踐中高效:它可以在O(logN)時間內完成查找,插入和刪除,
這里的n是樹中元素的數目。
紅黑樹的特性
紅黑樹是每個節點都帶有顏色屬性的二叉查找樹,顏色為紅色或黑色。
在二叉查找樹強制一般要求以外,對於任何有效的紅黑樹我們增加了如下的額外要求:
1、節點是紅色或黑色。
2、根是黑色。
3、所有葉子都是黑色(葉子是NIL節點)。
4、每個紅色節點必須有兩個黑色的子節點。(從葉子到根之間不能有兩個連續紅色節點)
5、從任一節點到其每個葉子的所有簡單路徑都包含相同數目的黑色節點。

這些約束確保了紅黑樹的關鍵特性:
從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長。
旋轉
左旋
左旋圖解(x左邊節點逆時針旋轉):
a / \ b x -> x / \ / \ c d a d / \ b c
如圖以x為中心,其父節點為a,左邊兄弟節點為b,左子節點為c,右子節點為d
左旋就是保證x和右子節點d不變,逆時針旋轉與x節點的直接相關的左邊節點,也就是a,b,c
左旋的過程是將x的父節點a,左邊兄弟節點b 逆時針旋轉,
原來的x左節點c被x的父節點替代,
原來x的左子節點c逆時針方向平移后變成x的原父節點a的右子節點。
右旋
右旋圖解(x右邊節點順時針旋轉):
a / \ x b -> x / \ / \ d c d a / \ c b
如圖以x為中心,其父節點為a,右邊兄弟節點為b,左子節點為d,右子節點為c
右旋就是保證x和左子節點d不變,順時針旋轉與x直接相關的右邊節點,也就是a,b,c
右旋的過程是將x的父節點a,右邊兄弟節點b,還有右子節點c順時針旋轉。
原來的x右節點c被x的父節點替代,
原來的x的右子節點c順時針方向平移后變成x的原父節點a的左子節點。
