參考: https://www.jianshu.com/p/e136ec79235c
R-B樹(紅黑樹) = 自平衡的二叉查找樹
AVL樹(平衡二叉樹) = 自平衡的二叉查找樹
在線測試: https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
性質:
- 每個節點要麼是黑色, 要麼是紅色
- 根節點是黑色
- 每個葉子節點(NIL)是黑色
- 每個紅色結點的兩個子結點一定都是黑色
- 任意一結點到每個葉子結點的路徑都包含數量相同的黑結點
- a. 如果一個結點存在黑子結點, 那麼該結點肯定有兩個子結點
自平衡:
刪除、插入導致紅黑樹失衡後, 紅黑樹會自平衡, 即通過左旋、右旋和變色來實現
左旋: 以某個結點作爲支點(旋轉結點), 其右子結點變爲旋轉結點的父結點, 右子結點的左子結點變爲旋轉結點的右子結點, 左子結點保持不變
右旋: 以某個結點作爲支點(旋轉結點), 其左子結點變爲旋轉結點的父結點, 左子結點的右子結點變爲旋轉結點的左子結點, 右子結點保持不變
變色: 結點的顏色由紅變黑或由黑變紅
插入
插入操作叫法約定示例圖:
插入規則:
注: 4.3.2 更改爲 '插入結點是其父結點的左子結點'
刪除
刪除操作叫法約定示例圖:
刪除規則: