NYOJ 題目202紅黑樹

2021-07-02 04:42:20 字數 1421 閱讀 7096

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:3 描述

什麼是紅黑樹呢?顧名思義,跟棗樹類似,紅黑樹是一種葉子是黑色果子是紅色的樹。。。

當然,這個是我說的。。。

《演算法導論》上可不是這麼說的:

如果乙個二叉查詢樹滿足下面的紅黑性質,那麼則為乙個紅黑樹。

1)每個節點或是紅的,或者是黑的。

2)每個葉子節點(nil)是黑色的

3)如果乙個節點是紅色的,那麼他的兩個兒子都是黑的。

4)根節點是黑色的。

5)對於每個節點,從該節點到子孫節點的所有路徑上包含相同數目的黑色節點。

我們在整個過程中會用到這些性質,當然,為了公平起見,其實即使你不知道這些性質,這個題目也是可以完成的(為什麼不早說。。。。)。在紅黑樹的各種操作中,其核心操作被稱為旋轉,那麼什麼是旋轉呢,我們來看乙個例子:

假設我們這裡擷取紅黑樹的一部分,放在左邊,通過操作如果可以把他轉化為右邊的形式,那麼我們就稱將根為x的子樹進行了左旋,反之我們稱將根為y的樹進行了右旋:

恰好慢板同學把自己紅黑樹弄亂了,然後請你幫忙進行修復,他將向你描述他的紅黑樹(混亂的。。。)。然後告訴他需要用哪種方式旋轉某個節點。在你完成工作之後,直接向大黃提交新的樹的中序遍歷結果就好了。

hint:

在這裡好心的慢板同學給你簡單的解釋下樣例:

最開始的時候樹的樣子是這樣的:

0/    \

1       2

然後對於標號為0的節點進行右旋,結果將變為:1\

0\2然後呢。。。

中序遍歷?這個是什麼東西,哪個人可以告訴我下。。。。

輸入

輸入分兩部分:

第一部分:乙個整數t(1<=t<=10),表示測試的組數。

第二部分:第一行是乙個數字n,表示紅黑樹的節點個數。0

輸出每組測試返回n行數字,表示對樹的中序遍歷。在每組測試資料之後留一行空行。

樣例輸入

1

30 1 2

1 -1 -1

2 -1 -1

10 1

樣例輸出

1

02

**

鄭州大學校賽題目

分析:這是一道二叉樹的中序遍歷

#include#include#include#includeusing namespace std;

struct dot

;dot mp[120];

void midord(int x)

int main()

{ int n,a,b,m,t,c;

scanf("%d",&t);

while(t--)

{cin>>n;

for(int i=0;i

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹筆記 紅黑樹的插入操作

紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...