紅黑樹是一個平衡的二叉樹,但不是一個完美的平衡二叉樹。雖然咱們但願一個全部查找都能在~lgN次比較內結束,可是這樣在動態插入中保持樹的完美平衡代價過高,因此,咱們稍微放鬆逛一下限制,但願找到一個能在對數時間內完成查找的數據結構。這個時候,紅黑樹站了出來。 數據結構
紅黑樹的性質:.net
一、節點是紅色或者黑色。blog
二、根節點是黑色get
三、每一個葉子節點都是黑色的空節點(NULL爲黑色)原理
四、每一個紅色節點的子葉子節點是黑色二叉樹
五、從任意節點到其每一個葉子節點的全部路徑都包含相同的黑色節點。這一點說一下我本身的理解,因爲好比a節點到任意葉子節點黑色節點相同,其實從根節點到任意節點的黑色節點相同一個道理,由於根節點到a節點實際上是共有的(對於a節點到任意葉子節點的path)。因此個人理解是:根節點到每一個葉子節點的全部路徑都包括相同黑色節點。搜索
紅黑樹的插入qq
首先紅黑樹的插入其實不是那麼容易實現的,之前搜索樹的插入咱們很容易理解如今咱們首先思考一個問題,你插入節點的默認顏色是RED或BLACK? 這裏咱們須要根據性質來思考,首先若是插入黑節點,這個能夠直接插入不管它的父親是什麼顏色,可是紅黑樹的性質是每條路徑的黑色節點數目相同這個時候你再想一想那其餘路徑的黑色節點數目必定比你如今少一個節點,因此調整起來是很是繁瑣的. 插入紅節點不須要調整其餘路徑,若是它的父親爲黑,那麼直接插入,若是他的父親爲紅那麼在該路徑上面開始分狀況調整. 因此插入節點默認顏色必定要爲紅.若是爲黑調節成本太大了。數據
紅黑樹底層原理及實現http://www.javashuo.com/article/p-cxzkekmn-p.html。紅黑樹