Introduction to algorithm(chapter 13)

紅黑樹,由於在二叉查找樹上進行的insert,delete,search等的時間都爲o(h),故保持良好的h可以避免最壞運行時間,紅黑樹就是這樣一種保持良好高度的二叉查找樹。

首先看看紅黑樹必須滿足的幾個性質:

1):每個節點非紅即黑

2):根節點是黑色的

3):每個葉節點(NIL)均是黑色的

4):一個節點爲紅,則它的兩個兒子均是黑色的。(必有兩個兒子的原因在於需要保持黑高度相同)換句話說,一個節點是紅色的那麼它的父節點必是黑色的。

5):從某內部節點x到葉子節點的任一路徑的黑高度相同。(黑高度即黑色節點的個數,不包括x節點但包括葉子節點NIL)

由於以上性質,使得從根到任一葉子節點的黑色節點個數至少有一半以上(證明:設從根到某一葉子節點所有節點爲total個,紅色節點爲x個,黑色節點爲y個,故x+y=total;由於一個節點爲紅色的話那麼它的兩個兒子必須是黑色的,即出現一個紅色節點那麼它的子節點必須出現黑節點,故y>=x;所以total = x+y<=y+y  -> y>=total/2;因此一條路徑上黑色節點數必大於等於總節點數),故紅黑樹的高度h=o(log n)


旋轉,若要旋轉某個節點x。

左旋轉,x的右子節點爲y,那麼就以x鏈接y的邊爲軸不變,將y變成x的父節點。

右選擇,x的左子節點爲y,那麼就以x鏈接y的邊爲軸不變,將y變成x的父節點。


紅黑樹的插入。若要插入一個節點z,那麼插入時必須着色爲紅色,否則會影響黑高度。當插入後,可能導致紅黑樹的5個性質不能保持。由於插入的節點z是在葉子節點上,故破壞的只能是性質2)和性質4)。

對於性質2),當紅黑樹爲空時纔可能破壞它,因此插入後僅有一個節點,只需將顏色變成黑色即可。

對於性質4):當插入的節點z的父節點也爲紅色時,那麼需要調整;設z的父節點爲p(z),爺爺爲p(p(z)),因爲父親是紅色的那麼爺爺必然是黑色的。這時要對於z的叔叔節點y的顏色進行討論(z的叔叔即是爺爺的另一個子節點)。

當y爲紅色時,那麼由於z是紅色,父親和叔叔都是紅色,而爺爺是黑色,那麼只需將爺爺變成紅色,父親和叔叔都變成黑色即將爺爺以下的節點都保持了性質4),而爺爺此時爲紅色,可能由破壞了上面的節點,即z此時向上移動兩層到爺爺節點,此時再對z進行調整。

當y爲黑色時,此時z和父親爲紅色,叔叔也爺爺均爲黑色,那麼此時要進行一次或者兩次旋轉,將z調整到爺爺的位置。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章