定義
紅黑樹是每個節點都帶有顏色屬性的二叉查找樹,顏色或紅色或黑色。在二叉查找樹強制一般要求以外,對於任何有效的紅黑樹我們增加了如下的額外要求:
- 性質1.每個節點或是紅色或是黑色。
- 性質2. 根節點是黑色。
- 性質3.所有葉節點都是黑色。(葉子是NUIL節點)
- 性質4. 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
- 性質5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
下面是一棵簡單的紅黑樹,可以到它就符合上述性質
畫一個紅黑樹
我們規定新插入的節點爲紅色
這是爲什麼?
就是因爲性質5,假設我們插入一個黑色節點,不管它放在哪裏,都會導致你這個分支的黑色多了一個,新生成的紅黑樹都不滿足性質5.
總結一下紅黑樹調整的規律
插入新節點
如果:
- 父節點是黑色,不進行調整
- 父節點是紅色:
- 叔叔節點是空的,進行旋轉,變色
- 叔叔節點是紅色,把父節點和叔叔節點變爲黑色,祖父節點變爲紅色
- 叔叔節點是黑色,旋轉加變色