先說平衡二叉樹(AVLTree):
作用:就是查找,AVL樹的查找,插入和刪除再平均和最壞情況下都是O(logn)。如果再AVL樹中插入或刪除節點后,使得高度之差大於1.此時AVL樹的平衡狀態就被破壞,他就不是一顆平衡二叉樹。如果要它維持在一個平衡狀態,就需要對其進行旋轉處理,那么創建一顆二叉樹的成本其實不小。就有人提出了紅黑樹理論,那么紅黑樹到底比AVL樹好在哪里?
- 紅黑樹與AVL樹的比較:
- AVL樹的時間復雜度雖然由於紅黑樹,但是對於現在的計算機,cpu太快,可以忽略性能差異。
- 紅黑樹的插入刪除比AVL樹更便於控制操作。
- 紅黑樹整體性能略優於AVL樹。(紅黑樹旋轉情況少於AVL樹)
- 紅黑樹的性質:(時間復雜度o(lgn))
- 每個節點不是黑色就是紅色
- 根節點是黑色的。
- 如果一個節點是紅色,那么他的倆個子節點就是黑色
- 對於每個節點,從該節點到其后代葉結點的簡單路徑上包含相同數目的黑色節點。
- 如何保證最長路路徑不超過最短路徑的倆倍呢?
- 最短路徑:全是黑節點;最長路徑:黑白相間。-----》所以當最長路徑黑色節點數目同最短路徑黑色節點相同時,最長路徑恰好是最短路徑的倆倍。
- 顏色表示:因為每個結點都只會有一條指向自己的鏈接(從它的父結點指向它),我們將鏈接的顏色保存在表示結點的Node數據類型的布爾變量color中(若指向它的鏈接是紅色的,那么該變量為true,黑色則為false)。當我們提到一個結點顏色時,我們指的是指向該結點的鏈接的顏色。