學習紅黑樹後個人總結 插入刪除

2021-09-24 10:44:18 字數 3063 閱讀 6400

一、概念

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

二、特性

1、每個節點或者是紅色,或者是黑色

2、根節點是黑色的

3、每個葉子節點(nil)是黑色的。注意:這裡的葉子節點,是指為空的葉子節點

4、如果乙個節點是紅色的,則它的子節點必須是黑色的

5、從任意乙個節點到其葉子的所有路徑中,所包含的黑節點數量是相同的

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

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

三、應用

紅黑樹主要用於儲存有序的資料,它的時間複雜度是o(logn),非常高效

四、基本操作——插入

1、簡介

紅黑樹的基本操作是新增和刪除,在對紅黑樹進行新增和刪除之後,都會用到旋轉方法。為什麼要用旋轉方法呢?因為新增或刪除紅黑樹的節點之後,紅黑樹就發生了變化,可能就不滿足紅黑樹的5條性質了,也就不是一顆紅黑樹了。而通過旋轉可以使這棵樹重新成為紅黑樹,即旋轉的目的就是為了保證紅黑樹的特性

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

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

2、插入規則

新插入的節點都為紅色

3、紅黑樹插入的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情形

對於第四點總結:插入節點與父節點的位子和父節點與祖父節點的位子為同側時,以祖父節點為當前節點進行旋轉操作,並交換父節點和祖父節點的顏色,即比如當前節點為父節點右孩子,父節點為祖父節點的右孩子,則以祖父節點為當前節點。當前節點與父節點的位子和父節點與祖父節點的位子不在同側時,以父節點為當前節點進行旋轉

同側

不同側

插入的過程講解完畢。

五、基本操作——刪除

1、紅黑樹刪除的情形

一、從樹中刪除節點x(以尋找後繼節點的方式進行刪除,乙個結點的後繼,是大於x.key的最小關鍵字的結點。乙個結點的前驅,是小於x.key的最大關鍵字的結點。可檢視該篇文章

情況①:如果x沒有孩子,且如果x是紅色,直接刪除x;如果x是黑色,則以x為當前節點進行旋轉調色,最後刪掉x

情況②:如果x只有乙個孩子c,交換x和c的數值,再對新x進行刪除。根據紅黑樹特性,此時x不可能為紅色,因為紅色節點要麼沒有孩子,要麼有兩個黑孩子。此時以新x為當前節點進**況①的判斷

情況③:如果x有兩個孩子,則從後繼中找到最小節點d,交換x和d的數值,再對新x進行刪除。此時以新x為當前節點進**況①或②的判斷

二、旋轉調色(n=旋轉調色的當前節點[等於情況①中的x],p=n的父親,w=n的兄弟,nf=n的遠侄子,nn=n的近侄子)

情況1:n是根或者n是紅色,則:直接將n設為黑色

情況2:n不是根且n是黑色,且w為紅色,則:將w設為黑色,p設為紅色,對p進行旋轉(n為p的左子時進行左旋,n為p的右子時進行右旋),將情況轉化為情況1、2、3、4、5

情況3:n不是根且n是黑色,且w為黑色,且w的左右子均為黑色,則:將w設為紅色,將p設為當前節點進行旋轉調色,將情況轉化為情況1、2、3、4、5

情況4:n不是根且n是黑色,且w為黑色,且nf為黑色,nn為紅色,則:交換w與nn的顏色,並對w進行旋轉(n為p的左子進行右旋,n為p的右子進行左旋),旋轉後n的新兄弟w有乙個紅色wr,則轉換為情況5

情況5:n不是根且n是黑色,且w為黑色,且nf為紅色,nn為黑色,則:將w設為p的顏色,p和nf設為黑色,並對p進行旋轉(n為p的左子進行左旋,n為p的右子進行右旋),n設為根

刪除操作未找到規律

參考資料

紅黑樹學習總結 刪除

看了蠻多種講解,個人感覺這個專欄情況分得比較細,比較適合我這樣頭腦不太靈光的初學者一些。一步簡化 如果需要刪除的結點有兩個孩子,我們的做法是找到這個結點的中序後繼,將後繼結點中的資料拷貝至待刪除結點,然後刪除後繼結點。而後繼結點必然最多只有乙個子結點,這樣我們就把刪除兩個孩子的結點轉為刪除乙個孩子的...

紅黑樹(插入)

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

紅黑樹插入

一 什麼是紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或black。一棵紅黑樹是滿足下面紅黑性質的二叉搜尋樹 1 每乙個結點或是紅...