一、紅黑樹性質
- 結點必須是紅色或者黑色。
- 根節點必須是黑色。
- 葉節點(NIL)必須是黑色(NIL節點無數據,是空節點)。
- 紅色結點不能連續。
- 從任一節點出發到其每個葉子節點的路徑,黑色節點的數量必須相等。
二、旋轉變色規則
已知插入根節點塗爲黑色,其他節點都是塗紅色;如果插入結點的父節點爲黑色,就不需要進行旋轉變色調整,其他情況都需要根據實際選擇合適的處理策略進行調整,使其符合紅黑樹性質。最開始調整的時候是將插入結點作爲當前節點。
實際情況 | 處理策略 | |
第一種 | 當前節點的父節點是紅色,且其祖父節點的另一個子節點(叔叔節點)也是紅色,祖父節點不是根節點。 |
(1)將父節點和叔叔節點設爲黑色。 (2)將祖父節點設爲紅色。 (3)將祖父節點作爲新的當前節點。 |
第二種 | 當前節點的父節點是紅色,叔叔節點也是紅色,且當前節點在最邊上(即每行最左邊或最右邊的節點),祖父節點是根節點。 |
(1)將根節點作爲新的當前節點,以根節點爲支點進行左旋(插入的是右孩子)或者右旋(左孩子)。 (2)旋轉後將新的根節點變黑色,其他節點根據需要變色,只要保證不出現紅紅連續節點即可。 (3)判斷性質5是否已滿足,不滿足則以當前節點爲支點進行一次左旋或右旋,旋轉後依舊要保證不出現紅紅連續節點,否則進行變色。 |
第三種 | 其他所有情況,前提是當前節點的父節點是紅色。 |
(1)將父節點作爲新的當前節點。 (2)以新的當前節點爲支點進行左旋(插入的是右孩子)或者右旋(左孩子)。 |