RB tree性質理解

2021-07-27 16:06:11 字數 1675 閱讀 6095

每個節點的顏色非紅即黑。

根節點的顏色必定為黑。

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

如果節點的顏色為紅,其左右子節點的顏色必為黑。

任意節點到null(尾節點)的任意路徑上包含的黑色節點數量必須一致。

根據以上規則,可以得出以下要求:為了能達到以上的要求,需要對變化後的紅黑樹進行調整。調整的手段主要有兩種:改變顏色旋轉

第一步:將紅黑樹當作一顆二叉查詢樹,將節點插入。

紅黑樹本身就是一顆二叉查詢樹,將節點插入後,該樹仍然是一顆二叉查詢樹。

第二步:將插入的節點著色為」紅色」。

為什麼著色成紅色,而不是黑色呢?為什麼呢?根據規則5得出的要求。

第三步:通過一系列的調整策略,使之重新成為一顆紅黑樹。

應用場景:

當前節點的父節點是紅色,且當前節點的祖父節點的另乙個子節點(叔叔節點)也是紅色。

解決辦法:

(01) 將「父節點」設為黑色。

(02) 將「叔叔節點」設為黑色。

(03) 將「祖父節點」設為「紅色」。

(04)將「祖父節點」設為「當前節點」(紅色節點);即,之後繼續對「當前節點」進行操作。

見圖1。

什麼是左旋?右旋?見圖2。

應用場景a:

當前節點的父節點是紅色,叔叔節點是黑色,且當前節點是其父節點的右孩子

解決辦法:

(01) 將「父節點」作為「新的當前節點」。

(02) 以「新的當前節點」為支點進行左旋。

見圖3。

應用場景b:

當前節點的父節點是紅色,叔叔節點是黑色,且當前節點是其父節點的左孩子

解決辦法:

(01) 將「父節點」設為「黑色」。

(02) 將「祖父節點」設為「紅色」。

(03) 以「祖父節點」為支點進行右旋。

見圖4。

帶你理解MST性質

假設要在n個城市之間建立通訊聯絡網,則連通n個城市需要n 1條線路。在這種情況下,我們自然需要考慮乙個問題,如何在最節省經費的條件下建立這個網路?很自然地我們會想到,將各個城市之間的線路開銷轉化為權重,要想找到最節省經費的方案,就需要找到能夠連通所有城市且權重最小的連通線路。因此,我們需要選擇一顆生...

RB Tree刪除詳解

紅黑樹的刪除操作較於插入操作,情況更為複雜 考慮到紅黑節點的差異性,我們在此通過紅黑節點來考慮這個問題,即僅僅通過要刪除的節點是紅節點,還是黑節點來討論不同的情況 1 刪除的紅節點為葉子結點 此處為不考慮空葉子結點的模型 假如上圖所示節點,需要刪除 25,或者 350 我們來看看結果 上圖結果表明 ...

對RBTree的總結

紅黑樹是一棵二叉搜尋樹,它在每個節點上增加了乙個儲存位來表示節點的顏色,可以是red或black。通過對任何一條從根到葉子簡單路徑上的顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡。紅黑樹是滿足下面紅黑性質的二叉搜尋樹 1.每個節點,不是紅色就是黑色的 2.根節點是黑色的 3.如...