通俗易懂的紅黑樹簡析

一、基本概念

 紅黑樹本質上是一棵近似平衡的二叉樹,它的節點只有兩種顏色即紅與黑,它滿足二叉搜索樹的基本性質,即樹上的任何節點的值大於其左子節點(若左子節點存在),任何節點的值大於其右子節點的值(若右子節點存在)。

 近似平衡:深度最大的節點的深度<= 2 * 深度最小的節點的深度。具體如何保證這種近似平衡後面會說到。

 紅黑樹與平衡二叉樹比較:因爲紅黑樹只追求近似平衡,所以在插入與刪除節點時,翻轉次數遠遠少於平衡樹,因此在需要較多插入刪除操作的場景中,使用紅黑樹更好。同樣也因爲近似平衡,所以在查詢時,紅黑樹查詢的深度可能會大於平衡二叉樹,所以在需要較多查詢的場景中,使用平衡二叉樹更好。

(圖片來自網絡)

二、紅黑樹的必須滿足的五條性質

性質1 . 節點是紅色或黑色。
性質2 . 根節點是黑色。
性質3 . 每個葉節點(NIL節點,空節點)是黑色的。
性質4 . 每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
性質5 . 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
       因爲性質5,所以延伸除了近似平衡狀態,試想根節點到每個葉子節點的黑色節點個數相同,而每兩個紅色節點之間不能直接相連,根節點又必須爲黑色,所以推導出:黑色節點個數<=每條路徑的總節點個數<=2倍的黑色節點數,所以最大深度與最小深度的最多相差一倍。
 因爲性質5,默認新插入的節點都爲紅色,就算有顏色衝突,也可以通過變色和旋轉來修改樹。
 注意:紅黑樹的查找、刪除、添加操作都爲log(n)。


三、紅黑樹的操作

 1、查找操作,是一個遞歸過程,很簡單,與當前節點比較,若大於該節點則查找右子樹,若小於該節點則查找該節點的左子樹。log(n)複雜度。

 2、新增操作,首先通過查找操作找到合適的插入位置,不能破壞平衡性質(左子節點<父節點<右子節點)。插入後,進行變色、旋轉操作保證這個樹的五個性質。
 
 3、刪除操作,先查找到該節點的位置,將該節點置爲空,之後通過變色、旋轉等操作保證樹的這五個性質。

 具體變色、旋轉的流程,我會在之後補上。
 









發佈了206 篇原創文章 · 獲贊 259 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章