紅黑樹(中序二叉樹)

2021-09-07 06:29:30 字數 1436 閱讀 2216

時間限制:

難度:3

描述

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

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

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

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

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

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

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

4)根節點是黑色的。

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

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

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

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

hint:

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

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

1       2

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

然後呢。。。

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

輸入分兩部分: 第一部分:乙個整數t(1<=t<=10),表示測試的組數。 第二部分:第一行是乙個數字n,表示紅黑樹的節點個數。0輸出

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

樣例輸入

1

30 1 2

1 -1 -1

2 -1 -1

10 1

樣例輸出

102

題解:就是中序輸出二叉樹,旋轉跟中序表示式沒有影響;

**;

#include#include

#include

#include

#include

using

namespace

std;

class

node

intgetl()

intgetr()

void

get()

};node dt[

10];

void visit(int

root)

intmain()

visit(0);

scanf("%d

", &n);

while(n--)

}return0;

}

紅黑樹(中序二叉樹)

難度 3 描述什麼是紅黑樹呢?顧名思義,跟棗樹類似,紅黑樹是一種葉子是黑色果子是紅色的樹。當然,這個是我說的。演算法導論 上可不是這麼說的 如果乙個二叉查詢樹滿足下面的紅黑性質,那麼則為乙個紅黑樹。1 每個節點或是紅的,或者是黑的。2 每個葉子節點 nil 是黑色的 3 如果乙個節點是紅色的,那麼他...

二叉樹 紅黑樹

也就是說,二叉排序樹中,左子樹都比節點小,右子樹都比節點大,遞迴定義。根據二叉排序樹這個特點我們可以知道,二叉排序樹的中序遍歷一定是從小到大的,比如上圖,中序遍歷結果是 1 3 4 6 7 8 10 13 14 效能取決於 public class demo public static void m...

紅黑二叉樹

紅黑二叉樹 紅黑二叉樹的基本思想是想用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表述2 3樹。或者說,我們將3 結點表示為由一條左斜的紅色鏈結相 兩個2 結點其中之一是另乙個的左子節點 連的兩個2 結點。這種表示的優點 我們無需修改就可以直接使用標準二叉查詢樹的get ...