紅黑樹的小小心得 插入

2021-09-02 02:50:46 字數 1520 閱讀 2693

剛剛學了二叉樹,突然又蹦出來乙個「紅黑樹」,這裡就是學習紅黑樹的一些小心得。

紅黑樹,從名字就可以看出來,這種數是由紅和黑兩種顏色來表示的。

首先需要了解紅黑樹的五個重要性質。

1.每乙個節點要麼是黑色要麼就是紅色;

2.根節點一定是黑色;

3.每乙個葉子節點一定是黑色;

4.如果乙個節點是紅色,那麼它的兩個子節點都是黑色;

5.任一節點到其每個葉子的所有路徑,都包含相同數目的黑色節點。

關於黑高度的定義:

從任何乙個節點,向下到底部的路徑中,包含的黑節點的個數,稱為這個節點的黑高度。從紅黑樹的第5條性質可以看出,黑高度是唯一的、確定的。

只要同時滿足紅黑樹的這些條件,就一定會有「紅黑樹可以保證任何兩條從根部到樹葉的路徑節點個數相差不超過2倍」這個平衡的性質。

紅黑樹是一種特殊的二叉樹,與普通的二叉樹不同就是它的每乙個節點都必須滿足上面的五個性質,通過對於每條路徑上節點顏色的規則進行限定,紅黑樹可以保證任何兩條從根部到樹葉的路徑節點個數相差不超過2倍。所以,紅黑樹是一種近似平衡的二叉搜尋樹。

紅黑樹的查詢、最大值、最小值、前趨、後繼等操作,與普通的二叉搜尋樹沒有什麼區別。插入和刪除操作需要重新實現。僅僅用普通的二叉搜尋樹的插入和刪除動作,可能會破壞紅黑樹本身的一些性質,因此,需要進行額外的處理。這些額外的處理主要是改變樹節點的顏色,或是改變樹的結構。

紅黑樹的插入:

在插入節點時,首先將插入的節點設為紅色,用普通二叉樹的方法,將此節點插入到紅黑樹中,然後再想辦法把被破壞的性質一一進行恢復。當乙個紅色的節點被插入時,只有兩條性質可能被破壞,即性質2和性質4,如果插入後,其父節點是黑色,那麼不需要進行改變,如果插入後發現其父節點是紅色或者沒有父節點(即在根節點上),那麼就要對其進行調整。由此可見,其主要的恢復部分是性質4,那麼接下來主要討論下關於性質4的恢復情況分析。

情況1:插入的地方是根節點

這種情況下,直接把此節點改為黑色即可。

情況2:插入的節點的父節點是黑色

這種情況下沒有任何錯誤。

情況3:插入的節點的父節點是紅色,且其祖父節點的另乙個子節點(叔叔節點)也是紅色

這種情況下,又可以分為父節點是左兒子還是右兒子,根據其對稱性,這裡只考慮是左兒子的情況。

首先,把插入的節點的父節點和叔叔節點改為黑色,把祖父節點改為紅色,再根據祖父節點的情況,往上繼續檢查,看是否符合紅黑樹的性質。

情況4:插入的節點的父節點是紅色,其叔叔節點是黑色,並且插入節點為父節點的右兒子

這種情況下,不考慮插入的節點,以此節點的父節點為支點,進行左旋變化。

情況5:插入的節點的父節點是紅色,其叔叔節點是黑色,並且插入節點為父節點的左兒子

這種情況下,將插入節點的父節點變為黑色,其祖父節點變為紅色,並以祖父節點為支點,進行右旋改變。

不得不吐槽一下,找了一些說明,但是。。。插入太麻煩了,就不想插入了!留著下次寫【刪除】的時候再用吧!!

紅黑樹(插入)

紅黑樹的插入操作相對刪除操作比較簡單。紅黑樹要滿足 任一節點至null的任何路徑,所含黑節點數必須相同。所以,為了滿足此性質,插入節點應該為紅色。如果插入節點的父親為黑色,則不需要進行調整,若為紅色,有三種情況需要討論。1.父節點為紅色,叔節點為紅色 對於這種情況,同時改變父 叔節點顏色為黑色,並將...

紅黑樹插入

一 什麼是紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或black。一棵紅黑樹是滿足下面紅黑性質的二叉搜尋樹 1 每乙個結點或是紅...

紅黑樹 插入

一 滿足下面幾個條件的二叉搜尋樹,稱為紅黑樹 1.任何乙個節點都被著色 紅色或是黑色。2.根節點是黑色的。3.所有的nil節點都看成黑色 nil節點是就是乙個假想的或是無實在意義的節點,所有應該指向null的指標,都看成指向了nil節點。包括葉節點的子節點指標或是根節點的父指標 4.如果乙個節點是紅...