演算法導論程式30 紅黑樹的旋轉(Python)

2021-08-01 17:23:08 字數 632 閱讀 2229

紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或black.

通過對任何一條從跟到葉子的簡單路徑上各個結點的顏色進行約束,紅黑樹確保沒有一條路徑會比其他路徑長出2倍,因而是近似於平衡的。

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

1.每個結點或是紅色的,或是黑色的。

2.根結點是黑色的。

3.每個葉結點是黑色的。

4.如果乙個結點是紅色的,則它的兩個子節點都是黑色的。

5.對每個結點,從該結點到其所有所有後代葉結點的簡單路徑上,均包含相同數目的黑色結點。

從某個結點x出發(不含該結點)到達乙個葉結點的任意一條簡單路徑上的黑色結點個數稱為該結點的黑高(black-height)bh(x)。

紅黑樹的黑高為其根結點的黑高。

旋**這是一種能保持二叉搜尋樹性質的搜尋樹區域性操作。

左旋:當在某個結點x上做左旋操作時,假設它的右孩子為y而不是t.nil。x可以為其右孩子而不是t.nil結點的樹內任意結點。左旋以x到y的鏈作為「支軸」進行,它使y成為該子樹新的根結點,x成為y的左孩子,y的左孩子成為x的右孩子。

紅黑樹(演算法導論)

測試 所用的例子為算導第三版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...