近期讀《linux核心設計與實現_第三版_清晰中文版》,發現linux低層資料結構很多都用到紅黑樹,查查資料說說自己的理解。
紅黑樹:二叉樹+高度限制
二叉樹:確定了它的查詢非常快。
高度限制:這個是取普通二叉樹和平衡二叉樹之間。
普通二叉樹,只管插入不做調整,可能會出現單鏈很長。
平衡二叉樹,所有的鏈高度相等,但存就需要調整,非常耗時。
紅黑樹,最長單鏈不會超過最短單鏈2倍,這樣也確定它存的耗時也居中。
紅黑樹特點5條:
1.所有節點非紅及黑。
2.根節點為黑節點。
3.所有葉子節(null)點為黑色。
4.所有節點到葉子節點中黑色節點數目相同。(確定最長單鏈不會超過最短單鏈2倍)
5.如果乙個節點為紅色,則它的子節點節點必須為黑色。
紅黑樹的操作:
查:二叉樹的特性決定它高效。
增:加入紅節點,根據旋轉、著色來保持紅黑樹特性。
刪:根據旋轉、著色來保持紅黑樹特性。
細節邏輯沒去實現,參考:
理解紅黑樹
在樹裡面的節點不是紅色的就是黑色的,沒有其他顏色,要不怎麼叫紅黑樹呢,是吧。性質二 根節點是黑色 根節點總是黑色的。它不能為紅。性質三 每個葉節點 nil或空節點 是黑色 這個可能有點理解困難,可以看圖 這個就是乙個紅黑樹,nil節點是個空節點,並且是黑色的。性質四 每個紅色節點的兩個子節點都是黑色...
徹底理解紅黑樹
在學習紅黑樹的時候,看了很多文章,發現都沒有講明白紅黑樹的原理,只是簡單列了紅黑樹的幾條規則,就開始講解紅黑樹的插入,讓人一直不知其所以然。也很難深刻的理解紅黑樹。最後翻起了 演算法 這本書,仔細了解了二叉樹查詢樹 2 3樹 紅黑樹,才明白了紅黑樹不是平白無故產生的,而是符合科學的發展觀念是循序漸進...
紅黑樹的理解
一 紅黑樹要達到自平衡的二叉樹,必須滿足下面5個性質 1 每個節點要麼是黑色,要麼是紅色。2 根節點是黑色。3 每個紅色節點的兩個子節點一定是黑色。4 任意乙個節點到每個子節點的路徑都包含相同梳理的黑節點。所以乙個節點存在乙個黑子節點,那肯定兩個子節點都是黑色 5 每次新增的新節點,都是紅色。二 紅...