紅黑樹知識總結

2021-09-24 11:15:40 字數 2620 閱讀 6436

紅黑樹(red black tree) 是一種自平衡二叉查詢樹,所有資料塊都儲存在節點中,在進行插入和刪除操作時通過特定操作保持二叉查詢樹的平衡,從而獲得較高的查詢效能,它雖然是複雜的,但它的最壞情況執行時間也是非常良好的,並且在實踐中是高效的: 它可以在o(log n)時間內做查詢,插入和刪除,這裡的n 是樹中元素的數目。

性質一:節點是紅色或者是黑色

性質二:根節點是黑色

性質三:每個葉節點(nil或空節點)是黑色

性質四:每個紅色節點的兩個子節點都是黑色的(也就是說不存在兩個連續的紅色節點)

性質五:從根節點到每乙個nil節點的路徑中,都包含了相同數量的黑色節點

這些性質的約束,使一棵紅黑樹從根到葉子的最長的可能路徑不多於最短的可能路徑的兩倍長,從而使這棵樹大致是平衡的,因為操作比如插入、刪除和查詢某個值的最壞情況時間都要求與樹的高度成比例,這個在高度上的理論上限允許紅黑樹在最壞情況下都是高效的,而不同於普通的二叉查詢樹(二叉查詢樹最壞的情況所有元素可能位於一條直線,高度比元素少1,這種情況下樹的效能急劇下降)。

為了使一棵紅黑樹在插入和刪除元素時能夠繼續保持平衡,有變色旋轉兩種操作,其中旋轉又分為旋轉和旋轉。

變色:顧名思義,就是將節點的紅色與黑色進行變換。

右旋**將當前節點向右旋轉,其左子節點移動到當前節點位置,左子節點的右子節點,變更為當前節點的左子節點。

左旋**與右旋轉一致,只是方向相反。

右旋轉示意圖:

左旋轉示意圖:

本章節參考文章:

說明:x為當前處理節點,p為x的父節點,pb為父節點的兄弟節點,pp為祖父節點

分類描述

處理方式說明1

pb為紅

p置黑,pb置黑,pp置紅,x指向pp,繼續處理

pp置紅,則可能違法性質四,所以需要繼續判斷

2pb為黑,x、p、pp不在一條直線

p左旋,x指向p,繼續處理

旋轉後使其在一條直線,轉化為情況3

3pb為黑,x、p、pp在一條直線

p置黑,pp置紅,pp左旋

已平衡,結束

4pb為nil,p為根節點且為紅

p置黑已平衡,結束

解析:

注意:以下解析以從p節點為pp節點左支為例

新插入的節點x為紅色,因為插入紅色節點相對而言容易調整;

如果插入乙個紅色新節點x後,其父節點p是黑色,則不用左調整,已經平衡,所以我們要處理的主要是插入後其父節點p是紅色的情況;

插入乙個紅色新節點x後,其父節點p也是紅色,則違法了性質四,我們需要將其中乙個變為黑色,我們將p置為黑色,但這樣一來,祖父節點pp的左支就會多出乙個黑色,要想辦法減少pp左支的黑色節點,那麼可以將pp置為紅色(p為紅色,則pp必為黑色),但是pp置為紅色後pp的右支又會少乙個黑色,所以需要把pp右支的黑色加上來,有兩個辦法:

若pb為紅色,則將pb置為黑色即可,但pp置為紅色可能有兩個連續的紅色節點,違反性質四,所以需要將x指向pp繼續向上判斷;

若pb是黑色,那麼只能右旋pp,讓p移動到pp的位置,從而左支增加乙個黑色,但是想要通過右旋達到目的,那麼x、p、pp必須是在一條直線上,否則右旋後x會成為pp的左子節點,從而出現兩個連續紅色,所以如果x、p、pp不是在一條直線上,可以先將p左旋,然後x指向p,繼續判斷處理,此時x、p、pp已經位於一條直線,可以採用我們前面說的處理方式進行處理。

該章節請參閱

這位大俠總結得非常好,後文只做一些輔助說明方便理解

需要注意的是,文中所說的d節點,其實是尋找出的繼承者節點,而非一開始我們想要刪除的節點,這點可以參考二叉查詢樹的刪除操作。

了解紅黑樹的刪除,首先需要了解下尋找繼承者,因為乙個節點被刪除,它可能有子節點,它的位置不方便調整,所以我需要可以尋找乙個合適的繼承者,將繼承者的值賦值給被刪除的節點,然後實際將繼承者刪除。

紅黑樹尋找繼承者的規則是,被刪除節點右邊最小的節點是繼承者,找到後將繼承者的值賦給被刪除的節點,然後實際將繼承者刪除,那麼可以知道,實際被刪除的節點總是位於這棵樹的最後一層或倒數第二層(可以推論出此時該節點僅有右子節點,且為紅色)。

文中總結了很多種情況,稍微有些凌亂,我在下面對文中的各種情況進行乙個層次羅列,方便理解,各個節點的指代仍然採用原文種的指代術語

d為紅色

d為黑色

dr不為nil

dr為nil

s為紅色

s為黑色

sl為紅色,sr顏色任意(其實可以推導出,此時s的子節點要麼為紅色要麼為nil)

sr為紅色,sl顏色任意(同上)

sl、sr均為黑色,p為紅色(由上可知此時sl與sr均為nil)

sl、sr均為黑色,p為黑色(由上可知此時sl與sr均為nil)

紅黑樹總結

r b tree,全稱是red black tree,又稱為 紅黑樹 它一種特殊的二叉查詢樹。紅黑樹的每個節點上都有儲存位表示節點的顏色,可以是紅 red 或黑 black r b tree,全稱是red black tree,又稱為 紅黑樹 它一種特殊的二叉查詢樹。紅黑樹的每個節點上都有儲存位表示...

紅黑樹總結

關鍵特點 1 根是黑色 2 null是黑色 3 沒有相連的紅色 4 乙個節點到null所有路徑上所有黑色節點數量相等 最高高度2log n 1 最壞時間複雜度log n 插入 自底向上插入 需要用乙個棧儲存搜尋路徑經歷過的節點。1 按照二叉搜尋樹插入,新插入點為紅色。2 如果新插入節點的父親是黑色,...

紅黑樹總結

節點是紅色或黑色 根節點是黑色 不能有連續的兩個紅色節點。從任一節點到其每個葉子的簡單路徑都包含相同數目的黑色節點 由上面的性質4可以得到,紅黑樹中新插入的節點必須是紅色節點。先按照二叉搜尋樹的插入方式,找到合適的插入位置。並且插入的節點應為紅色。如果新插入節點的父節點本身就是紅色,就和性質3發生了...