## 紅黑樹特性 1. root 為黑色節點 2. 所有 leaf 為黑色節點,值為 NIL 3. 若某節點為紅色則其 child 為黑色 (無兩個連續紅色節點) 4. 對任一節點,到 leaf 所經過的黑色節點數量一樣 為了符合以上特性,插入或刪除節點時需要作一些調整 ## 新增節點 按照 binary search tree 的方式將新節點 x 插入,並設為紅色 ### Case 0: x 為 root - 將 x 改為黑色 ### Case 1: x 的父節點 x.p 為黑色 - 直接插入即可,不影響回黑樹特性 ### Case 2: x 的父節點 x.p 為紅色,x 的 uncle y 為紅色 - x.p 和 y 改為黑色 - x.p.p 改為紅色 (根據上面提到的特性 3,x.p.p 原本一定是黑節點) - 將 x.p.p 設為新的 x,繼續調整紅黑樹 ![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-1LaPpwZywuAdLDX5miJlPNkGaz6L9T0ykCGrI3Xj6mwlxF-DeVmIkGaNB_6s6e0uIwE4O_HFi4jMXGPj77pipHmEnAdAdL-eetgG2SX9luvuC1AvPe-PANvJBsLRdpdqd2GjdBanZyGMkmXBoVXKDQluIdg16J2uEdri8-4VmesW_kw/s1600/RBT_insert_case2.png) ### Case 3: x 的父節點 x.p 為紅色,x 的 uncle y 為黑色,x.p.p, x.p, x 為一直線 - 以 x.p.p 為圓心,將 x.p 旋轉上去 - x.p 改為黑色, x.p.p 改為紅色 ![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYlYdvKQYMP1TPG_v0vEmIJFqY_q6U_JD1TxEq4qLp9h9E8URi3BfIj639hrlLIrHY_FarHBiwbpDM80gfq9lQ9Y9xd5kwTbxPDF2EzdajC0zmlcYdNGczEBITJNcFIPbhd9dWyf_NA9Hu73lkUwo0BpPGUewcmjtGyFDfKqNYuYbpWM/s1600/RBT_insert_case3.png) ### **Case 4**: x 的父節點 x.p 為紅色,x 的 uncle y 為黑色,x.p.p, x.p, x 非一直線 - 以 x.p 為圓心,將 x 旋轉上去 (x.p.p, x.p, x 會變成一直線) - 用 case 3 方法處理 ![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrIf44NMOTqk9DhpsUYWPWx0Zi2X8YuqtqSCFiIfzuzHcvpoq1_2nUnrQUn3J3fzmQZdeRN9HyNdYz8Od_x_rP8sZeGNTXF452EvD4Bm5bAkfLlyiaRTrxN0vkVhegqQ-yQWVl7Fdk4WNqqiF3VVs6G-w1csC8XHApCaebkjbvD1jj28o/s1600/RBT_insert_case4.png) ## 相關連結 [Red Black Tree Deletion | 紅黑樹刪除節點](https://showsun63.blogspot.com/2025/01/RBT-deletion.html) [Red Black Tree Visualization | 紅黑樹模擬器](https://www.cs.usfca.edu/~galles/visualization/RedBlack.html)