紅黑樹是自平衡二叉搜索樹的經典實現,廣泛應用於C++ STL的map/set、Java的TreeMap、Linux內核的rb_root等核心組件。本文從二叉搜索樹的缺陷切入,層層剖析紅黑樹的五大性質與平衡維護邏輯。
普通二叉搜索樹(BST)在最壞情況下(如有序插入)會退化為鏈表,查找/插入/刪除時間複雜度惡化至O(N)。根因在於樹缺乏平衡約束。紅黑樹通過引入「顏色」屬性與五條嚴格性質,保證樹高不超過2log₂(N+1),所有關鍵操作穩定在O(log N)。
除BST通用的key、left、right、parent指標外,每個節點新增一個color屬性(紅/黑)。為了統一邊界處理,紅黑樹引入哨兵節點(NIL):所有葉子節點的left/right、根節點的parent均指向同一個黑色NIL節點,而非NULL。
性質4與5共同約束了「最長路徑不超過最短路徑的2倍」,這是紅黑樹平衡的數學基石。
插入/刪除節點後,可能違背上述性質。恢復手段只有兩種:
O(1)。左旋以x → y邊為軸,使y上升為新子樹根,x成為y左孩子,y原左孩子轉為x右孩子;右旋對稱。旋轉不改變中序遍歷順序,故保持BST有序性。

下篇將詳細拆解插入修復的三種情況與刪除修復的四種情況,配合圖解與偽代碼,帶你徹底掌握紅黑樹核心算法。