1. 什麼是紅黑樹
- 紅黑樹,是一種二叉搜索樹,但在每個節點上增加一個存儲位表示節點的顏色,可以是Red或Black。
- 通過對任何一條從根到葉子的路徑上各個節點着色方式的限制,紅黑樹確保沒有一條路徑會比其他路徑長出倆倍,因而接近平衡。
【性質】
- 每個節點不是紅色就是黑色;
- 根節點是黑色的 ;
- 樹中不會出現連續的紅節點;
- 每條路徑上黑色節點的數量都是相等的;
- 葉子節點指的是空節點。
2. 插入
- 按照二叉搜索樹規則插入新節點;
- 檢測新節點插入後,紅黑樹的性質是否遭到破環。
【紅黑樹插入的是紅節點】
- 如果父親是黑色,沒有破壞性質,結束
- 如果父親是紅色,破壞了性質3,祖父一定是黑色,關鍵看叔叔(三種情況)。
【約定】
- cur爲當前節點,p爲父節點,g爲祖父節點,u爲叔叔節點;
- 情況一:cur爲紅,p爲紅,g爲黑,u存在且爲紅;
- 情況二:cur爲紅,p爲紅,g爲黑,u不存在/存在爲黑 -> 單旋;
- 情況三:cur爲紅,p爲紅,g爲黑,u不存在/存在爲黑 -> 雙旋。
【分析情況時以父爲左,叔叔爲右】
-
父爲左,叔叔爲右
- 情況一:變色、更新;
- 情況二:右單旋、變色;
- 情況三:先左單旋(變化後成情況二)、再右單旋、變色。
-
父爲右,叔叔爲左
- 情況一:變色、更新;
- 情況二:左單旋、變色;
- 情況三:先右單旋(變化後成情況二)、再左單旋、變色。
【圖解:以父爲左,叔叔爲右分析】
- 情況1
- 情況2
- 情況3