性質一:節點是紅色或者是黑色;
性質二:根節點是黑色;
性質三:每個葉節點(nil或空節點)是黑色;
性質四:每個紅色節點的兩個子節點都是黑色的(也就是說不存在兩個連續的紅色節點);
就是連續的兩個節點不能是連續的紅色,連續的兩個節點的意思就是父節點與子節點不能是連續的紅色。
**性質五:從任一節點到其沒個葉節點的所有路徑都包含相同數目的黑色節點;**
還是看圖:12
3
5
**性質五:從任一節點到其沒個葉節點的所有路徑都包含相同數目的黑色節點;
**
還是看圖:
1
2
3旋轉的目的是將節點多的一支出讓節點給另乙個節點少的一支,旋轉操作在插入和刪除操作中經常會用到,所以要熟記。
下面是左旋和右旋:
左旋:1
23
下面是左旋和右旋:
左旋:下面講講插入
因為要滿足紅黑樹的這五條性質,如果我們插入的是黑色節點,那就違反了性質五,需要進行大規模調整,如果我們插入的是紅色節點,那就只有在要插入節點的父節點也是紅色的時候違反性質四或者是當插入的節點是根節點時,違反性質二,所以,我們把要插入的節點的顏色變成紅色。
這個時候插入乙個紅色的節點並沒有對這五個性質產生破壞。所以直接插入不用在進行調整操作。
我們先看一下當要插入的節點是父節點的左支的情況:
這個時候,只需將父親節點和叔叔節點塗黑,將祖父節點塗紅。
下面我們再講講刪除的操作:
將被刪除元素與其右支的最小元素互換,變成如下圖所示:
然後再將被刪除元素刪除:
加入顏色之後,被刪除元素和後繼元素互換只是值得互換,並不互換顏色,這個要注意。
由:變成:
先兄弟與兄弟的左子節點顏色互換,進行右轉,變成:
由:
這裡並沒有語言實現,只是講了一下紅黑樹的插入刪除步驟,你可以根據步驟自己把紅黑樹實現。
點選這裡,照著規則一步一步的構建乙個紅黑樹吧。
4.要時刻記得 ,一切的操作都是為了保持那五條性質。
最後的最後的最後,一定要嘗試著自己推導一下插入刪除規則啊,不然經常忘,是睡一覺起來再看就有點懵逼的那種忘。
**wiki
最容易理解的紅黑樹原理
這篇部落格講述的思路比網上大多數人對於紅黑樹的描述要簡單清晰,總結一下紅黑樹的插入操作,所有的可能性只有4種 1.樹為空,插入的結點為根結點,節點變色為黑色。2.插入節點的父親結點為黑色結點,直接插入,不需要任何操作 3.插入節點的父親結點為紅色結點 3.1.叔叔節點為紅色 將叔叔和父親結點改為黑色...
樹 紅黑樹(通俗易懂)
由於紅黑樹本質上就是一棵二叉查詢樹,所以在了解紅黑樹之前,咱們先來看下二叉查詢樹。二叉查詢樹 binary search tree 也稱有序二叉樹 ordered binary tree 排序二叉樹 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 因為,一棵由n個結點,隨...
紅黑樹的部分易懂內容
嚴重參考 紅黑樹的定義 及性質 是一種二叉搜尋樹,有序的 做的改進是 對節點新增了 顏色分層 red 或者 black 的特性,紅黑平衡,保持了紅黑樹lgn高度。為了保證二叉樹的高度,保證搜尋 刪除 插入的 時間複雜度為 lgn.性質 每個節點顏色 非黑即紅 根節點為黑色 每個葉子節點都是黑色 這裡...