紅黑樹,是使用得非常多的一種自平衡二叉樹,這裡講解一下紅黑樹的插入(關於紅黑樹的概念以及旋轉這裡不進行說明)
首先,我們設當前插入節點為u,其父節點為pu,其祖父節點為gu,其父節點的兄弟節點(即其叔節點)為gr。
接下來分情況討論:
一、當樹為空樹時,u為根節點。
二、當樹不為空時,再分情況討論:
1.當pu節點為黑時,u插入,著紅色。
2.當pu節點為紅時,再分情況(gr的顏色及u,pu的位置):
1)當gr為紅色時:插入情況可以分為四種(如下圖),插入之後只需要對樹進行重新著色。
下面四中情況都只需要把gu變成紅色,把pu、gr變成黑色就行了。
重新著色之後情況如下:
2)當gr為黑色時:插入情況可以分為四種(如下圖),插入之後需要對樹進行旋轉以及重新著色。
第一種:gu節點右旋,交換pu、gu的顏色。第二種:pu節點左旋,再gu節點右旋,交換u、gu的顏色。
第三種:gu節點左旋,交換pu、gu的顏色。第四種:pu節點右旋,再gu節點左旋,交換u、gu的顏色。
旋轉及重新著色之後結果如下:
紅黑樹(插入)
紅黑樹的插入操作相對刪除操作比較簡單。紅黑樹要滿足 任一節點至null的任何路徑,所含黑節點數必須相同。所以,為了滿足此性質,插入節點應該為紅色。如果插入節點的父親為黑色,則不需要進行調整,若為紅色,有三種情況需要討論。1.父節點為紅色,叔節點為紅色 對於這種情況,同時改變父 叔節點顏色為黑色,並將...
紅黑樹插入
一 什麼是紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或black。一棵紅黑樹是滿足下面紅黑性質的二叉搜尋樹 1 每乙個結點或是紅...
紅黑樹 插入
一 滿足下面幾個條件的二叉搜尋樹,稱為紅黑樹 1.任何乙個節點都被著色 紅色或是黑色。2.根節點是黑色的。3.所有的nil節點都看成黑色 nil節點是就是乙個假想的或是無實在意義的節點,所有應該指向null的指標,都看成指向了nil節點。包括葉節點的子節點指標或是根節點的父指標 4.如果乙個節點是紅...