紅黑樹原理以及插入、刪除算法 附圖例說明

1、概念spa

R-B Tree,全稱是Red-Black Tree又稱紅黑樹,它是一種特殊的二叉查找樹,紅黑樹的每一個節點上都有存儲位表示節點的顏色,能夠是紅或黑。3d

2、特性blog

一、每一個節點或者是紅色,或者是黑色二叉樹

二、根節點是黑色的方法

三、每一個葉子節點(NIL)是黑色的。注意:這裏的葉子節點,是指爲空的葉子節點im

四、若是一個節點是紅色的,則它的子節點必須是黑色的d3

五、從任意一個節點到其葉子的全部路徑中,所包含的黑節點數量是相同的數據

特性解析1:根據特性4可知,從每一個葉子節點到根節點的全部路徑中不能有兩個連續的紅節點db

特性解析2:根據特性5可知,沒有一條路徑會比其它路徑長出兩倍,於是紅黑樹是接近平衡的二叉樹img

3、應用

紅黑樹主要用於存儲有序的數據,它的時間複雜度是O(logn),很是高效

4、基本操做——插入

一、簡介

紅黑樹的基本操做是添加和刪除,在對紅黑樹進行添加和刪除以後,都會用到旋轉方法。爲何要用旋轉方法呢?由於添加或刪除紅黑樹的節點以後,紅黑樹就發生了變化,可能就不知足紅黑樹的5條性質了,也就不是一顆紅黑樹了。而經過旋轉能夠使這棵樹從新成爲紅黑樹,即旋轉的目的就是爲了保證紅黑樹的特性

左旋:對節點x進行左旋,意味着將「x的右孩子變成x的父親」,而將「x原先的右孩子的左孩子變成x的右孩子」。即左旋中的「左」是指將別旋轉的節點變成一個左節點

右旋:對節點x進行右旋,意味着將「x的左孩子變成x的父親,而將」x原先的左孩子的右孩子變成x的右孩子「。即右旋中的」右「是指將被旋轉的節點變成一個右節點

二、插入規則

新插入的節點都爲紅色

三、紅黑樹插入的4種情形

(1)新節點位於根節點,其沒有父節點時,處理思路:將該節點直接設爲黑色便可

(2)新節點的父節點已然是黑色時,處理思路:不用動,這已然是一顆紅黑樹

(3)父節點和叔節點都是紅色時,處理思路:a.將父節點和叔節點設爲黑色;b.將祖父節點設爲紅色;c.將祖父節點設爲當前節點,並繼續對新當前節點進行操做

(4)父節點是紅色,叔節點是黑色時,又分以下四種狀況:

  • 當前節點是父親的左孩子,父親是祖父的左孩子(Left-Left),處理思路:a.將祖父節點右旋;b.交換父節點和祖父節點的顏色
  • 當前節點是父親的右孩子,父親是祖父的左孩子(Right-Left),處理思路:a.將父節點左旋,並將父節點做爲當前節點; b.而後再使用Left Left情形
  • 當前節點是父親的右孩子,父親是祖父的右孩子(Right-Right),處理思路:a.將祖父節點左旋;b.交換父節點和祖父節點的顏色
  • 當前節點是父親的左孩子,父親是祖父的右孩子(Left-Right),處理思路:a.將父節點右旋,並將父節點做爲當前節點; b.而後再使用Right Right情形

四、插入圖例

經過插入12   1   9   2   0   11   7   19   4   15   18   5   14   13   10   16   6   3   8   17完成上述全部情形的展現。

(1)插入12

說明:插入的節點如果根節點,則直接將其設置爲黑色

(2)插入1

說明:插入的節點若不是根節點,則將其設置爲紅色

(3)插入9

(4)插入2

(5)插入0

(6)插入11

(7)插入7

(8)插入19

(9)插入4

(10)插入15

(11)插入18

(12)插入5

(13)插入14

(14)插入13

(15)插入10

(16)插入16

(17)插入6

(18)插入3

(19)插入8

(20)插入17

插入的過程講解完畢。

5、基本操做——刪除

一、紅黑樹刪除的情形

1、從樹中刪除節點X以尋找後繼節點的方式進行刪除

狀況①:若是X沒有孩子,且若是X是紅色,直接刪除X;若是X是黑色,則X爲當前節點進行旋轉調色,最後刪X

狀況②:若是X只有一個孩子C,交換XC的數值,再對新X進行刪除。根據紅黑樹特性,此時X不可能爲紅色,由於紅色節點要麼沒有孩子,要麼有兩個黑孩子。此時以新X當前節點進行狀況①的判斷

狀況③:若是X有兩個孩子,則從後繼中找到最小節點D,交換XD的數值,再對新X進行刪除。此時以新X爲當前節點進行狀況①或②的判斷

2、旋轉調色N=旋轉調色的當前節點[等於狀況①中的X]P=N的父親,W=N的兄弟,Nf=N的遠侄子,Nn=N的近侄子

狀況1N是根或者N是紅色,則:直接將N設爲黑色

狀況2N不是根且N是黑色,且W爲紅色,則:W設爲黑色,P設爲紅色,對P進行旋轉(NP左子時進行左旋,N爲P的右子時進行右旋),將狀況轉化爲狀況12345

狀況3N不是根且N是黑色,且W爲黑色,且W的左右子均爲黑色,則:W設爲紅色,將P設爲當前節點進行旋轉調色,將狀況轉化爲狀況12345

狀況4N不是根且N是黑色,且W爲黑色,且Nf爲黑色,Nn爲紅色,則:交換WNn的顏色,並對W進行旋轉(NP的左子進行右旋,NP的右子進行左旋),旋轉後N的新兄弟W有一個紅色WR,則轉換爲狀況5

狀況5N不是根且N是黑色,且W爲黑色,且Nf爲紅色,Nn爲黑色,則:W設爲P的顏色,PNf設爲黑色,並對P進行旋轉(NP的左子進行左旋,NP的右子進行右旋)N設爲根

二、插入圖例

經過刪除12   1   9   2   0   11   7   19   4   15   18   5   14   13   10   16   6   3   8   17完成上述全部情形的展現。

(1)刪除12

(2)刪除1

(3)刪除9

(4)刪除2

(5)刪除0

(6)刪除11

(7)刪除7

(8)刪除19

(9)刪除4

(10)刪除15

(11)刪除18

(12)刪除5

(13)刪除14

(14)刪除13

(15)刪除10

(16)刪除16

(17)刪除6

(18)刪除3

(19)刪除8

(20)刪除20

刪除完畢!

相關文章
相關標籤/搜索