1. 程式人生 > >資料結構——紅黑樹(red-black tree)

資料結構——紅黑樹(red-black tree)

RB-tree(紅黑樹)是一種平衡二叉搜尋樹,它每個節點上增加了一個儲存位來表示節點的顏色,可以是 Red 或 Black,故得名。通過對任何一條從根到葉子的簡單路徑上各個節點的顏色進行約束,紅黑樹能夠確保沒有一條路徑會比其他路徑長出 2 倍,近似於平衡。

紅黑樹在改變元素數量和元素搜尋方面都很出色,它保證節點安插時最多隻會做兩個重新連結(relink)的動作,而且到達某一元素的最長路徑的深度,至多隻是最短路徑的深度的兩倍。

STL 中的重要容器——set/multiset 通常以紅黑樹(red-black tree)實現。

1. 紅黑樹的基本性質

紅黑樹中每個節點包含 5 個屬性:color, key, left, right, p(父節點)。如果一個節點沒有子節點或者父節點,則該節點的相應指標為 NIL。

一棵紅黑樹是滿足下面紅黑性質的二叉搜尋樹:

  • 每個節點是紅色的,或是黑色的;
  • 根節點是黑色的;
  • 每個葉節點是黑色的;
  • 如果一個葉節點是紅色的,則它的兩個子節點均是黑色的;
    • 黑色節點則無其子節點顏色的要求。
  • 對每個節點,從該節點其所有後代葉節點的簡單路徑上,均包含相同數目的黑色節點。