1. 程式人生 > 資訊 >沃爾瑪 / 大潤發在售,頂諾尊品整切牡蠣牛排 10 片 99 元再發車

沃爾瑪 / 大潤發在售,頂諾尊品整切牡蠣牛排 10 片 99 元再發車

紅黑樹定義和性質

紅黑樹是一種含有紅黑結點並能自平衡的二叉查詢樹。它必須滿足下面性質

  • 性質1:每個結點要麼是黑色,要麼是紅色。
  • 性質2:根結點是黑色。
  • 性質3:每個葉子結點(NIL,空結點)是黑色。
  • 性質4:每個紅色結點的兩個子結點一定都是黑色。(不會有連續的紅色結點)
  • 性質5:任意結點到葉子結點經過的黑色結點數目相同。

問題:

紅黑樹怎麼自平衡?什麼時候需要左旋或右旋?插入和刪除破壞了樹的平衡後怎麼處理?

紅黑樹也是二叉查詢樹,二叉查詢樹這一資料結構並不難,而紅黑樹之所以難是難在它是自平衡的二叉查詢樹,在進行插入和刪除等可能會破壞樹的平衡的操作時,需要重新自處理達到平衡狀態。

紅黑樹能自平衡,它靠的是三種操作:左旋、右旋和變色。

  • 左旋:以某個結點作為支點(旋轉結點),其右子結點變為旋轉結點的父結點,右子結點的左子結點變為旋轉結點的右子結點,左子結點保持不變。
  • 右旋:以某個結點作為支點(旋轉結點),其左子結點變為旋轉結點的父結點,左子結點的右子結點變為旋轉結點的左子結點,右子結點保持不變。
  • 變色:結點的顏色由紅變黑或由黑變紅

可以發現旋轉操作是區域性的。另外可以看出旋轉能保持紅黑樹平衡的一些端詳了:當一邊子樹的結點少了,那麼向另外一邊子樹“借”一些結點;當一邊子樹的結點多了,那麼向另外一邊子樹“租”一些結點。

紅黑樹插入

插入操作包括兩部分工作:一查詢插入的位置;二插入後自平衡。

新插入的結點顏色總是紅色的,(如果是黑色,那麼插入位置所在的子樹黑色結點總是多1,必須做自平衡。)為了保證紅黑樹的性質能繼續保持,再對有關結點重點著色並旋轉。

插入情景1:紅黑樹為空樹

處理:把插入結點作為根結點,並把結點設定為黑色。

插入情景2:插入結點的Key已存在

處理:那麼把插入結點設定為將要替代結點的顏色,再把結點的值更新就完成插入。

插入情景3:插入結點的父結點為黑結點

處理:由於插入的結點是紅色的,並不會影響紅黑樹的平衡,直接插入即可,無需做自平衡。

插入情景4:插入結點的父結點為紅結點

如果插入結點的父結點為紅結點,那麼該父結點不可能為根結點,所以插入結點總是存在祖父結點。

原文連結:30張圖帶你徹底理解紅黑樹 - 簡書 (jianshu.com)