紅黑樹的插入

2021-10-01 12:03:51 字數 1304 閱讀 5227

紅黑樹的插入總共不算映象的話總共五種情況:

插入就要做根,即插入之前樹中沒有結點,插入的這個結點就是m_head的parent

第二種就是插入的父親是黑的,所以不需要改變

第三種就是插入的父親是紅的,叔叔也是紅的,此時需要的操作是改色,將父親結點與叔叔結點的顏色變成黑的,將爺爺結點的顏色變成紅色,然後繼續向上遍歷,將所有的出現的這種情況都處理了,如果遇到根就先變紅再變黑,即遇到m_head就退出

第四種是父親是紅色,但是叔叔是黑的,我和父親一條線,進行單旋,單旋結束後將父親的額顏色變成黑色,爺爺的顏色變成紅色

最後一種如果我父親是紅色,叔叔黑色,但是我和父親不在一條線上沒救需要根據情況進行雙旋,第一次旋轉之後交換一下我和父親結點,然後就和第四種一樣了,最後記得將爺爺變紅,父親變黑

bool

insert

(const t & val)

else

if(val > cur-

>m_data)

else

}//上面的**完成的是查詢要插入的點的位置

cur =

new rbtreenode

(val);if

(val < pre-

>m_data)

else

cur-

>m_parent = pre;

//上面的**完成的是將要插入的點在pre的左邊還是右邊確定下來

if(pre-

>m_color == red)

else

rround

(grand)

; pre-

>m_color = black;

grand-

>m_color = red;

break;}

}}else

else

lround

(grand)

; pre-

>m_color = black;

grand-

>m_color = red;

break;}

}}}//省略的else是第二種情況

}else

//第一種情況

root-

>m_color = black;

m_head-

>m_left =

leftmost()

; m_head-

>m_right =

rightmost()

;return

true

;}

紅黑樹(插入)

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

紅黑樹插入

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

紅黑樹 插入

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