一、為什么要引入紅黑樹
因為AVL樹比紅黑樹更加平衡,但AVL樹在插入和刪除的時候也會存在大量的旋轉操作。所以當你的應用涉及到頻繁的插入和刪除操作,切記放棄AVL樹,選擇性能更好的紅黑樹。
紅黑樹不追求”完全平衡”,即不像AVL那樣要求節點的?|balFact| <= 1,它只要求部分達到平衡,但是提出了為節點增加顏色,紅黑是用非嚴格的平衡來換取增刪節點時候旋轉次數的降低,任何不平衡都會在三次旋轉之內解決,而AVL是嚴格平衡樹,因此在增加或者刪除節點的時候,根據不同情況,旋轉的次數比紅黑樹要多。
就插入節點導致樹失衡的情況,AVL和RB-Tree都是非常多兩次樹旋轉來實現復衡rebalance,旋轉的量級是O(1)
刪除節點導致失衡,AVL需要維護從被刪除節點到根節點root這條路徑上所有節點的平衡,旋轉的量級為O(logN),而RB-Tree非常多只需要旋轉3次實現復衡,只需O(1),所以說RB-Tree刪除節點的rebalance的效率更高,開銷更小!
延伸閱讀:
二、什么樣的數據結構稱為紅黑樹
紅黑樹(Red Black Tree)是一種自平衡的二叉查找樹,它與平衡二叉樹相同的地方在于都是為了維護查找樹的平衡而構建的數據結構,它的主要特征是在二叉查找樹的每個節點上添加了一個屬性表示顏色,顏色有兩種,紅與黑。
性質:
每個節點是紅色或者黑色;
根節點是黑色;
所有葉子節點都是黑色(葉子是NIL節點,也稱為外節點);
每個紅色節點的子節點都是黑色(從每個葉子節點到根節點的所有路徑上不能有兩個連續的紅色節點);
從紅黑樹的任一節點到其每個葉子節點的所有路徑都包含相同數目的黑色節點(包含黑色節點的數目稱為該節點的黑高度)。