紅黑樹

1.概念數組

紅黑樹是一種自平衡二叉查找樹,是在計算機科學中用到的一種數據結構,典型的用途是實現關聯數組。它是在1972年由魯道夫·貝爾發明的,他稱之爲"對稱二叉B樹",它現代的名字是在 Leo J. Guibas 和 Robert Sedgewick 於1978年寫的一篇論文中得到的。它是複雜的,但它的操做有着良好的最壞狀況運行時間,而且在實踐中是高效的: 它能夠在O(log )時間內作查找,插入和刪除,這裏的是樹中元素的數目。數據結構

它的統計性能要好於平衡二叉樹(有些書籍根據做者姓名,Adelson-Velskii和Landis,將其稱爲AVL-樹),所以,紅黑樹在不少地方都有應用。在C++ STL中,不少部分(目前包括set, multiset, map, multimap)應用了紅黑樹的變體(SGI STL中的紅黑樹有一些變化,這些修改提供了更好的性能,以及對set操做的支持)。其餘平衡樹還有:AVLSBT伸展樹TREAP 等等。性能

2.性質ui

紅黑樹是每一個節點都帶有顏色屬性的二叉查找樹,顏色或紅色或黑色。在二叉查找樹強制通常要求之外,對於任何有效的紅黑樹咱們增長了以下的額外要求:htm

性質1. 節點是紅色或黑色。ci

性質2. 根節點是黑色。get

性質3 每一個葉節點是黑色的。it

性質4 每一個紅色節點的兩個子節點都是黑色。(從每一個葉子到根的全部路徑上不能有兩個連續的紅色節點)class

性質5. 從任一節點到其每一個葉子的全部路徑都包含相同數目的黑色節點。計算機科學

這些約束強制了紅黑樹的關鍵性質: 從根到葉子的最長的可能路徑很少於最短的可能路徑的兩倍長。結果是這個樹大體上是平衡的。由於操做好比插入、刪除和查找某個值的最壞狀況時間都要求與樹的高度成比例,這個在高度上的理論上限容許紅黑樹在最壞狀況下都是高效的,而不一樣於普通的二叉查找樹。

要知道爲何這些特性確保了這個結果,注意到性質4致使了路徑不能有兩個毗連的紅色節點就足夠了。最短的可能路徑都是黑色節點,最長的可能路徑有交替的紅色和黑色節點。由於根據性質5全部最長的路徑都有相同數目的黑色節點,這就代表了沒有路徑能多於任何其餘路徑的兩倍長。

相關文章
相關標籤/搜索