紅黑樹是一種自平衡的二叉查詢樹,可解決二叉查詢樹因為多次插入新節點導致的不平衡問題。
除了二叉查詢樹的基本特性外,還具有下列的特性:
1)節點是紅色或者黑色
2)根節點是黑色
3)每個葉子節點都是黑色的空節點(nil節點)
4)每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
5)從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點
下圖的這棵樹就是一顆典型的紅黑樹
因為上面的這些規則限制,才保證了紅黑樹的自平衡。紅黑樹從根到葉子的最長路徑不會超過最短路徑的2倍。
當插入或者刪除節點時,紅黑樹的這些規則有可能被打破,這時候就要做出一些調整,來保證這些規則。
調整規則,包括:變色,旋轉(左旋(逆時針),右旋(順時針))。
應用:
std::map底層資料結構為紅黑樹
二叉樹 紅黑樹
也就是說,二叉排序樹中,左子樹都比節點小,右子樹都比節點大,遞迴定義。根據二叉排序樹這個特點我們可以知道,二叉排序樹的中序遍歷一定是從小到大的,比如上圖,中序遍歷結果是 1 3 4 6 7 8 10 13 14 效能取決於 public class demo public static void m...
紅黑二叉樹
紅黑二叉樹 紅黑二叉樹的基本思想是想用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表述2 3樹。或者說,我們將3 結點表示為由一條左斜的紅色鏈結相 兩個2 結點其中之一是另乙個的左子節點 連的兩個2 結點。這種表示的優點 我們無需修改就可以直接使用標準二叉查詢樹的get ...
二叉樹與紅黑樹
應用場景 1.伺服器io口,心跳包 2.多執行緒就緒,延時,等待,睡眠集合 二叉樹的遍歷分為 前序,中序,後序,按層次 如何檢測二叉樹資料對不對?可以使用中序遍歷,因為中序遍歷可以通過對映的方法來判斷二叉樹的資料對不對。如何解決最壞情況下的二叉樹?使用平衡二叉樹的話,在插入資料的時候,效能會非常差,...