紅黑樹的部分易懂內容

2021-08-16 03:19:36 字數 2628 閱讀 6029

嚴重參考:

紅黑樹的定義 及性質

是一種二叉搜尋樹,有序的 ,做的改進是 對節點新增了 顏色分層 red  或者 black 的特性,紅黑平衡,保持了紅黑樹lgn高度。為了保證二叉樹的高度,保證搜尋、刪除、插入的 時間複雜度為 lgn.

性質:每個節點顏色 非黑即紅;

根節點為黑色;

每個葉子節點都是黑色(這裡的葉子節點指:樹尾端的nil指標(null節點)不包含資料只充當書再次結束的指示)

如果節點為紅色,那麼它的2個子節點為黑色【並沒有說一定要一層黑+一層紅】

對於根節點,到葉節點樹尾端nil指標的每條路徑 包含相同數目的黑節點。

關於樹的旋轉(紅黑樹在節點插入、刪除時容易改變紅黑性質,所以要對樹進行旋轉操作以及對節點重新著色的操作恢復其性質)

【記憶技巧】本著變化移動最小的原則

pivot-y-c一脈相承(宗親),把分家(y的左子樹)變異,作為pivot的右子樹,

把y宗親帶著c節點輩分提公升,作為pivot的子節點,因著移動最小原則,pivot子樹只能放在y的另一支。

左旋完成

右旋同理;

刪除二叉搜尋樹的節點:

該節點沒有兒子,為葉子節點,直接刪除;

只有乙個子節點,那麼子節點替換就可以;

有兩個子節點,或者說左右子樹,一般習慣用左子樹的最大元素替換(順著左兒子一直搜尋右子樹即可),或者用右子樹的最小元素替換。

紅黑樹的刪除與修復:

刪除節點是紅色,那麼紅黑樹性質不變(關注性質4)

2.刪除節點是黑色,那麼可能改變,要修正,

(1)若被刪節點不是父節點該邊子樹的唯一節點,那麼性質5遭破壞,比如上圖,刪除 25號節點,那麼這一支到各個葉子節點null的黑節點數會變化。

(2)若被刪節點唯一非空子節點為紅色(刪除後要繼位的唯一選擇),由於被刪黑節點的父節點一定是紅色(性質4),那麼性質4被破壞,紅的子也變紅了。

(3)若被刪節點是根節點,而它的唯一非空節點是紅色,那麼根節點變紅,性質2被破壞。

(4)其他的情況,比如被刪根節點,它的子節點都為黑色,那麼???沒懂性質5

我們認為,頂上去替代的節點可有雙重顏色。本身色+固有繼承色(黑色),那麼有

紅+黑:直接塗染成黑色,一鍵恢復;

黑+黑組合:且是根節點,什麼不用做,無條件滿血復活;

但是,如果以下幾種複雜的情況:

(1)黑+黑,且,兄弟節點為紅色(可知父節點和兄弟節點的子節點分為黑)

(2)黑+黑,且,兄弟為黑色,且,兄弟節點的兩個子節點也為黑色

(3)黑+黑,且,兄弟節點為黑色,兄弟的左子為紅色,右子為黑色

(4)黑+黑,且,兄弟節點是黑色,兄弟的右子為紅色,左子的顏色任意

針對恢復:

(1)父節點染紅,兄弟染黑,並且左旋,問題轉化為(2)

(2)把當前節點和兄弟節點中抽取一重黑色(???)追加到父節點上,把父節點當成新的當前節點,重新進入演算法。

(3)把兄弟結點染紅,兄弟左子節點染黑,之後再在兄弟節點為支點解右旋,之後重新進入演算法。此是把當前的情況轉化為情況4,而性質5得以保持,

(4)把兄弟節點染成當前節點父節點的顏色,把當前節點父節點染成黑色,兄弟節點右子染成黑色,之後以當前節點的父節點為支點進行左旋,此時演算法結束,紅黑樹所有性質調整正確,

二叉搜尋樹的插入:

與根節點比較,已存在,不插入;《根節點,與根節點左子樹比較;>跟節點與根節點右子樹比較,直到左子樹或者右子樹為空,則插入到空位置。

紅黑樹暫時不考慮吧,太複雜。基本情況:

(a)插入根節點,如果是紅色,則變黑;如果是黑色,不變 

b.(1)插入修復情況

1:如果當前結點的父結點是紅色且祖父結點的另乙個子結點(叔叔結點)是紅色

(2)插入修復情況

2:當前節點的父節點是紅色

,叔叔節點是黑色,當前節點是其父節點的右子

(3)插入修復情況

3:當前節點的父節點是紅色

,叔叔節點是黑色,當前節點是其父節點的左子

樹 紅黑樹(通俗易懂)

由於紅黑樹本質上就是一棵二叉查詢樹,所以在了解紅黑樹之前,咱們先來看下二叉查詢樹。二叉查詢樹 binary search tree 也稱有序二叉樹 ordered binary tree 排序二叉樹 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 因為,一棵由n個結點,隨...

最容易懂的紅黑樹

性質一 節點是紅色或者是黑色 性質二 根節點是黑色 性質三 每個葉節點 nil或空節點 是黑色 性質四 每個紅色節點的兩個子節點都是黑色的 也就是說不存在兩個連續的紅色節點 就是連續的兩個節點不能是連續的紅色,連續的兩個節點的意思就是父節點與子節點不能是連續的紅色。性質五 從任一節點到其沒個葉節點的...

通俗易懂的紅黑樹簡析

紅黑樹本質上是一棵近似平衡的二叉樹,它的節點只有兩種顏色即紅與黑,它滿足二叉搜尋樹的基本性質,即樹上的任何節點的值大於其左子節點 若左子節點存在 任何節點的值大於其右子節點的值 若右子節點存在 近似平衡 深度最大的節點的深度 2 深度最小的節點的深度。具體如何保證這種近似平衡後面會說到。紅黑樹與平衡...