紅黑樹插入刪除演算法思想

2021-10-02 13:49:56 字數 1861 閱讀 7729

一、紅黑樹介紹

紅黑樹是特殊的二叉查詢樹,具有以下五個特點:

(1)  節點為黑色或紅色

(2)根節點為黑色

(3)   紅色節點不能連續

(4)根節點到nil節點的各個路徑上黑色節點數量相同

(5)nil節點為黑色,nil節點為葉節點的空的孩子

根據性質(4)可知,紅色節點具有0或2個孩子。

二、左旋和右旋

在紅黑樹刪除和插入之後,為了保持紅黑樹的狀態,可能需要用到左旋和右旋兩種操作,左旋和右旋操作不改變紅黑樹是二叉查詢樹的特點。

(1)左旋

(2)右旋

三、插入演算法思想

紅黑樹在插入新節點時可能會改變紅黑樹的性質,在新節點插入時,需要根據以下幾種情況做相應的操作,新節點插入預設為紅色(對紅黑樹平衡影響最小),插入的節點都會成為葉節點。假設插入節點(當前節點)為q,父節點為p,叔父節點為b,祖父節點為g,插入新節點時會遇到一下幾種情況,可根據不同的情況做不同的操作。pb

g(1)

黑紅/黑

黑/紅(2)紅紅

黑(3)紅黑

黑(1)直接插入新節點

(2)插入q後,將p和b變成黑色,g變為紅色,再將g視為q,進行下一輪的判斷,進入平衡調節階段。

(3)a、若q為p的左子,p為g的左子,則調換p和g 的顏色,並對p進行右旋,完成調節

b、若q為p的右子,p為g的左子,先對p進行左旋,轉化為情況a。

c、若q為p的右子,p為g的右子,則調換p和g的顏色,並對p進行左旋,完成調節。

d、若q為p的左子,p為g的右子,先對p進行右旋,轉換為情況c。

此外若q為根節點,直接將q置為黑色即可,情況(3)是平衡調節階段會遇到的情況。

四、刪除演算法思想

刪除操作給紅黑樹帶來的影響比較大,因為刪除節點可能是葉節點或是非葉節點,當要刪除乙個節點時,可能會遇到以下幾種情況:

(1)刪除的節點無孩子,若節點為紅色,則直接刪除(不影響紅黑樹性質),若節點為黑色,先再進行平衡調節再刪除。

(2)刪除的節點只有乙個孩子,由紅黑樹的性質可得,該節點為黑色,且孩子為紅色,則將該節點和孩子節點進行數值調換,轉換為情況(1)

(3)刪除的節點有兩個孩子,則將該節點和右子樹中最小的節點進行數值調換,轉換為情況(2)或情況(1)

總結三種情況,在進行刪除操作時,首先要做的就是將節點位置調換到葉節點位置,然後再進行平衡調節。平衡調節的步驟如下:q為當前節點,b為兄弟節點,p為父節點,bn為近侄子節點,bf為遠侄子節點qb

pbnbf(1)黑紅

黑黑黑(2)黑黑

紅黑黑(3)黑黑

黑黑黑(4)黑黑

紅/黑黑/紅

紅(5)黑黑

紅/黑紅

黑(1)將b和p進行顏色調換,然後將p向q的方向進行左旋或者右旋,轉換為情況(2),q不變

(2)將b置為紅色,p置為黑色,完成平衡調節

(3)將b置為紅色,p視為q,進行下一輪判斷,最終可能轉換為(2)或者一直n取到根節點,取到根節點時結束

(4)將p和bf置為黑色,b置為p的顏色,然後將p向q的方向進行左旋或者右旋,完成平衡調節

(5)將wn與b進行顏色調換,並將b向bf方向進行左旋或者右旋,轉換為情況(4),q不變

**實現:

紅黑樹插入演算法

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

演算法7 紅黑樹的插入與刪除

讀者盆友,晚上好。本部落格 示例均來自 演算法 algorithmes forth edition 美 robert sedgewick kevin wayne 著 謝路雲譯 前幾篇部落格順序的介紹了符號表的各種實現 我們首先介紹了 無序鍊錶中順序查詢 有序陣列中的二分查詢 二分查詢優缺點 二分查詢...

紅黑樹(插入)

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