演算法導論 紅黑樹基本概念

2021-08-04 05:09:48 字數 1165 閱讀 6085

剛剛接觸到紅黑樹的時候,感覺很奇怪,二叉樹已經很好用了,為什麼要發明紅黑樹??看到演算法導論的目錄才明白,二叉樹在執行查詢,刪除操作的時候,時間複雜度為o(h),這時間複雜度與二叉樹的高度有關,如果二叉樹高度較小,自然很方便,但是如果遇到樹的高度較高時(所有的資料都在一根樹枝上),二叉樹和鍊錶就差別不大了。所以發明了紅黑樹,紅黑樹是一種平衡搜尋樹,紅黑樹的高度最多為2lg(n+1),時間複雜度為o(h'),h'<2lg(n+1),所以紅黑樹相對於二叉樹而言效能更好。

首先說明紅黑樹的五大性質:

1.每個節點不是黑色就是紅色,非黑即紅。

2.根節點一定是黑色。

3.每個葉節點一定是黑色。

4.每個紅色節點的兩個子節點為黑色。

5.對於每個節點,該節點到所有後代葉節點的路徑上黑色節點的數目相同。

然後定義:紅黑樹的節點的黑高指得是節點x某支路上黑色節點的數目(不包括節點x,但是包括葉節點(nil))。

引理:一棵具有n個節點的紅黑樹,其樹高至多為2lg(n+1)

證明:方法1(數學歸納法):

首先我們要證明節點x的紅黑樹具有2^bh(x)-1個內部節點(bh(x)表示節點x的黑高)

1.當具有節點x的紅黑樹的樹高為0時,黑高也為0,則內部節點為0,符合上述公式。

2.假設當節點x的紅黑樹高度不為0時,不妨設黑高為bh(x),則其子節點的黑高為bh(x)或bh(x)-1,假設其子節點滿足上述式子,則有

其子節點至少有2^(bh(x)-1)-1個內部節點,則節點x的內部節點可得2^(bh(x)-1)-1+2^(bh(x)-1)-1+1=2^bh(x)-1,結果與上述結論相同,故命題得證。

由紅黑樹的性質4可知,黑色節點一定比紅色節點多,則樹高h<=2bh(x),則有n>2^(h/2)-1,化簡可得h<=2lg(n+1)。

方法2:

假設紅黑樹如上圖所示,現將紅色節點與其黑色的父節點合併,合併後的紅黑樹圖如下圖所示:

這是一顆2-3-4樹,這棵樹的高度等於黑高bh(x),每個節點最少包含兩個最多包含四個節點,則該樹內部節點數目2^(bh(x))-1



紅黑樹(演算法導論)

測試 所用的例子為算導第三版p179圖13 4 include using namespace std const bool black 0 黑色 const bool red 1 紅色 struct node 結點結構 class rb tree 初始化nil結點和root node left r...

演算法導論 紅黑樹

原文 組內培訓,講紅黑樹,找出演算法導論,啃了乙個週末,其中插入結點很簡單,刪除結點有點複雜,但跟著演算法導論上一步一步來沒有什麼問題。不想備份blog的,所以沒有把上穿。可直接察看ppt。紅黑樹性質 1.每個節點或是紅的,或是黑的 2.根節點是黑的 3.每個葉結點 nil 都是黑的 4.如果乙個結...

演算法導論例程 紅黑樹

紅黑樹是比較重要的資料結構,作為乙個典型的平衡二叉樹 沒有一條簡單路徑是其他路徑的二倍 它與二叉搜尋樹的區別是它的結點多了乙個屬性 color,color有兩種值,red和black,顏色的選取遵循以下原則 1 每個節點是紅色的,或是黑色的 2 根節點是黑色的 鬆弛紅黑樹 relaxed red b...