紅黑樹的原理,雙紅缺陷,雙黑缺陷

2021-08-17 14:53:02 字數 1727 閱讀 4752

引入紅黑樹的目的是為了實現在維護bst平衡的同時,盡量控制拓撲結構調整的次數,即最好做到每次動態操作後只有o(1)次的拓撲調整。

紅黑樹的規則:

(1)樹根必須是黑色;

(2)外部節點必須為黑色;

(3)其餘節點:紅節點只能有黑孩子,即不能出現相鄰的父子兩代都為紅色;

(4)外部節點到根:所有外部節點的黑深度相同。

在紅黑樹中,提公升紅色節點,使之與黑父親等高,每顆紅黑樹都會等價於一棵4階的b樹,也叫(2,4)樹,在紅黑樹的動態調整中,借助於b樹可以方便我們理解。

呼叫bst的插入演算法,引入乙個新的末端節點,並初始化時將其染為紅色。如果其父親p也為紅色時,就會發生雙紅缺陷。

p=x->parent();//父節點

g=p->parent();//祖父節點

u=(p==g->lc)?g->rc:g->lc;//叔父節點

(1)叔父節點u為黑色時,有如下兩種情況

對應問題為在b樹中,超級節點內有兩個相鄰的紅色節點,可做一次3+4重構,並將中間的紅色節點染為黑色,另乙個相鄰的黑色節點染為紅色解決。

(2)叔父節點u為紅色時,也有如下兩種情況

對應問題為在b樹中,超級節點發生了上溢,可模仿b樹的處理方法,進行一次**操作。p與u轉黑,g轉紅,節點**,g上公升一層,但有可能在更高層引發雙紅缺陷。

但是只要做過一次重構,調整就會結束。

(1)s為黑,且至少有乙個紅孩子t,p隨意

對應於b樹中,刪除節點後發生下溢,可通過旋轉借關鍵碼解決。

(2)s為黑,且兩個孩子均為黑,p為紅

s轉紅,p轉黑,拓撲結構不變,所有子節點的黑深度都減小乙個,仍然相等,刪除操作結束。

(3)s為黑,且兩個孩子均為黑,p為黑

s轉紅,紅黑樹的性質在區域性得以恢復,但是上層節點會發生下溢,最差情況遞推至根節點。

(4)s為紅

s轉黑,p轉紅,此時問題轉化為(1)或(2)。

綜上,雙黑缺陷需要1次的拓撲調整,和最多o(logn)次的重染色,即可恢復。

紅黑樹原理

若左子樹不為空,則左子樹上所有節點的值都小於根節點的值 若右子樹不為空,則右子樹上所有節點的值都大於根節點的值 且左右子樹都為二叉搜尋樹 查詢 必須從根節點開始查詢 如果值比根節點大則查詢右子樹,否則左子樹,直到找到節點 插入 與查詢類似 逐個節點對比,直到找到滿足條件的null,就插入到相應位置 ...

紅黑樹下 紅黑樹的實現

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

紅黑樹下 紅黑樹的實現

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