資料結構之紅黑樹插入詳解

2021-10-25 10:34:17 字數 2590 閱讀 2602

目錄

一、概述

二、紅黑樹插入

三、總結

紅黑樹的插入包含兩個步驟:

查詢流程:

從根節點開始查詢;

若根節點為空,那麼插入節點作為根節點,結束;

若根節點不為空,那麼把根節點作為當前節點;

若當前節點為null,返回當前節點的父節點,結束;

若當前節點key等於查詢key,那麼該key所在節點就是插入節點,更新節點的值,結束;

若當前節點key大於查詢key,把當前節點的左子節點設定為當前節點,重複步驟4;

若當前節點key小於查詢key,把當前節點的右子節點設定為當前節點,重複步驟4;

經過上面幾個步驟已經找到節點插入的位置了,把插入節點放到正確的位置就可以了。

注意:插入節點應該是紅色。原因:根據紅黑樹特性之一【任意一節點到每個葉子節點的路徑都包含數量相同的黑節點】,紅色在父節點(如果存在)是黑色節點時,紅黑樹的黑色平衡不會被破壞,所以不需要進行自平衡操作。但如果插入節點是黑色,那麼插入位置所在的子樹黑色節點總是多1,必須做自平衡操作。

紅黑樹插入分很多種情況:

【a】紅黑樹為空樹

因為紅黑樹為空樹,所以直接將插入節點作為紅黑樹的根節點,然後注意紅黑樹跟節點必須為黑色,所以還需要將插入節點的顏色變為黑色,這種情況是最簡單的紅黑樹插入操作。

處理步驟總結:

【b】插入節點的key已存在

根據key值,在紅黑樹中查詢已經存在相同key的節點,因為插入之前紅黑樹已經是平衡的,所以只需要將插入節點的顏色設定為已存在的相同key的節點的顏色,然後更新key值即可。

處理步驟總結:

【c】插入節點的父節點為黑節點

因為紅黑樹規定新插入節點的顏色為紅色,當插入節點的父節點為黑色時,並不會破壞【任意一節點到每個葉子節點的路徑都包含數量相同的黑節點】特性,所以無需進行平衡操作,直接插入即可。

處理步驟總結:

【d】插入節點的父節點為紅節點

這種情況是最複雜的,因為紅黑樹規定新插入節點的顏色為紅色,當插入節點的父節點為紅色時,必然就破壞了【任意一節點到每個葉子節點的路徑都包含數量相同的黑節點】特性,所以這種情況必須進行自平衡操作。

這種情況也分為下面好幾種場景:

【d-1】叔叔節點存在並且為紅節點【叔叔節點:s 插入節點:i 父節點:p 祖父節點:pp】

從紅黑樹【每個紅色節點的兩個子節點一定都是黑色】特性可以推測出插入節點的祖父節點pp肯定為黑節點,因為不可以同時存在兩個相連的紅節點。那麼此時該插入子樹的紅黑層數的情況是:黑紅紅。最簡單的處理方式是把其改為:紅黑紅。

示意圖如下所示:

可見,插入節點的祖父節點pp已經是紅色節點,如果pp的父節點是黑色,那麼滿足【不能存在相連的兩個紅色節點】特性;如果pp的父節點是紅色,那麼pp紅色,pp父節點也是紅色,又得從pp節點出發,繼續進行插入自平衡操作,一直到紅黑樹平衡為止。

【d-2】叔叔節點不存在或為黑節點,並且插入節點的父親節點是祖父節點的左子節點【叔叔節點:s 插入節點:i 父節點:p 祖父節點:pp】

如果叔叔節點為黑節點,而父節點為紅節點,那麼叔叔節點所在的子樹的黑色節點就比父節點所在子樹的多1了,這不滿足紅黑樹【任意一節點到每個葉子節點的路徑都包含數量相同的黑節點】特性。下圖也可以看出不滿足:

【d-2】又可以分為如下兩種:

【d-2-1】插入節點是其父節點的左子節點

處理步驟總結:

【d-2-2】插入節點是其父節點的右子節點

處理步驟總結:

【d-3】叔叔節點不存在或為黑節點,並且插入節點的父親節點是祖父節點的右子節點

【d-3】可以分為如下兩種情況:

【d-3-1】插入節點是其父節點的右子節點

處理步驟總結:

【d-3-2】插入節點是其父節點的左子節點

處理步驟總結:

由於筆者水平有限,文中可能存在不對之處,還望大家指正,一起學習,一起進步!

資料結構之紅黑樹

定義 紅黑樹是一顆二叉查詢樹,樹中結點顏色或為紅色或為黑色,且滿足如下條件 根結點和所有外結點的顏色為黑色 根結點到任意乙個外結點的路徑上沒有連續的兩個紅色結點,若乙個結點是紅色,則其兩個兒子結點都是黑色 根結點到任意外結點的路徑上都有相同數目的黑色結點。1 插入操作 插入操作可以概括為以下幾個步驟...

資料結構之紅黑樹(二) 插入操作

插入或刪除操作,都有可能改變紅黑樹的平衡性,利用顏色變化與旋轉這兩 寶就可應對所有情況,將不平衡的紅黑樹變為平衡的紅黑樹。在進行顏色變化或旋轉的時候,往往要涉及祖孫三代節點 x表示操作的基準節點,p代表x的父節點,g代表x的父節點的父節點。我們先來大體預覽一下插入的過程 1 沿著樹查詢插入點,如果查...

資料結構 紅黑樹

紅黑樹是二叉排序樹的改進,紅黑樹有幾個特點 1 節點只有2中顏色,紅色和黑色。2 根節點一定是黑色節點。3 紅色節點的子節點一定是黑色節點。4 黑色高度 根節點到每個葉子節點的路徑長度包含相同的黑色節點 相等。規定的插入的節點一定是紅色節點,紅黑樹的插入節點後需要調整的規則,插入節點需要調整的情況有...