紅黑樹特點:
每個節點非紅即黑;
根節點總是黑色的;
每個葉子節點都是黑色的空節點(nil節點);
如果節點是紅色的,則它的子節點必須是黑色的(反之不一定);
從根節點到葉節點或空子節點的每條路徑,必須包含相同數目的黑色節點(即相同的黑色高度)
紅黑樹的應用:
treemap、treeset以及jdk1.8之後的hashmap底層都用到了紅黑樹。
為什麼要用紅黑樹
簡單來說紅黑樹就是為了解決二叉查詢樹的缺陷,因為二叉查詢樹在某些情況下會退化成乙個線性結構。
紅黑樹屬於(自)平衡二叉樹,但是為了保持「平衡」是需要付出代價的,紅黑樹在插入新資料後可能需要通過左旋,右旋、變色這些操作來保持平衡,如果鍊錶長度很短的話,根本不需要引入紅黑樹的,引入之後還要付出代價維持它的平衡。但是
鍊錶過長就不一樣了。至於為什麼選 8 這個值呢?通過概率統計所得,這個值是綜合查詢成本和新增元素成本得出的最好的乙個值。
理解紅黑樹
在樹裡面的節點不是紅色的就是黑色的,沒有其他顏色,要不怎麼叫紅黑樹呢,是吧。性質二 根節點是黑色 根節點總是黑色的。它不能為紅。性質三 每個葉節點 nil或空節點 是黑色 這個可能有點理解困難,可以看圖 這個就是乙個紅黑樹,nil節點是個空節點,並且是黑色的。性質四 每個紅色節點的兩個子節點都是黑色...
紅黑樹理解
近期讀 linux核心設計與實現 第三版 清晰中文版 發現linux低層資料結構很多都用到紅黑樹,查查資料說說自己的理解。紅黑樹 二叉樹 高度限制 二叉樹 確定了它的查詢非常快。高度限制 這個是取普通二叉樹和平衡二叉樹之間。普通二叉樹,只管插入不做調整,可能會出現單鏈很長。平衡二叉樹,所有的鏈高度相...
紅黑樹的理解
一 紅黑樹要達到自平衡的二叉樹,必須滿足下面5個性質 1 每個節點要麼是黑色,要麼是紅色。2 根節點是黑色。3 每個紅色節點的兩個子節點一定是黑色。4 任意乙個節點到每個子節點的路徑都包含相同梳理的黑節點。所以乙個節點存在乙個黑子節點,那肯定兩個子節點都是黑色 5 每次新增的新節點,都是紅色。二 紅...