紅黑樹,並非想象中的那麼複雜
通常他給我們的印象是很複雜,有很多case,要小心的旋轉。有人說,曾將在某公司的面試時,被要求實現紅黑樹。他覺得這很沒有道理,幾乎很少有人能在不參考教科書的情況下,記清楚那麼多的case。
在這一章裡,我將向你展示目前我所見過的最簡潔的紅黑樹實現。簡潔到什麼程度呢?我打賭你看過後能輕鬆通過上面的面試——Wow, 紅黑樹原來可以這麼簡單!
這個實現,來自Chris Okasaki在卡耐基梅隆大學(CMU)的博士研究成果。他啟發我用同樣的方法簡潔地實現了AVL tree和Splay tree。
這一章我們講紅黑樹,大致內容如下:
1. 簡介——我們看看普通的排序二叉樹致命弱點,並且給出樹旋轉的概念;
2. 紅黑樹的定義——我們看看為什麼紅黑樹的性質能解決平衡問題,從而勝過排序二叉樹;
3. 插入——我們給出紅黑樹插入演算法的數學定義,這裡是本章的精華;
4. 刪除——刪除本來不是個問題,但是我們要展示下刪除比起插入有多複雜;
6. 傳統實現——我們看看傳統實現的紅黑樹插入演算法有多複雜,並做進一步的比較分析;傳統實現的刪除演算法我們留作練習。
7. 其他——多說兩句
全文在
https://sites.google.com/site/algoxy/rbtree
附件是PDF版。
全部原始碼在github可以獲得:
https://github.com/liuxinyu95/AlgoXY