紅黑樹用於解決二叉搜尋樹查詢時的最壞時間複雜度達到o(n)的情況。有一情形:多次插入新節點導致的不平衡,如下圖所示:
在滿足二叉搜尋樹特性的前提下,還需滿足以下5個特點:
一 節點非紅即黑。
二 根結點是黑色。
三 所有null節點稱為葉子節點,且其顏色為黑色。
四 所有紅節點的2個子節點都為黑色【換言之,從任意子節點到根節點不能有2個「連續」的紅色節點。】
五 從任一節點到其每個子節點的所有路徑都包含相同的黑色的節點。
紅黑樹的插入和刪除時,要對紅黑樹進行調整,進行「旋轉或變色」的操作。下面這篇部落格不僅對紅黑樹的插入和刪除操作進行了詳細的步驟講解,還講解了為什麼要這樣操作來進行插入和刪除操作。
紅黑樹的應用:jdk集合類的treemap和treeset底層用紅黑樹實現。jdk8中的hashmap其底層實現也用到了紅黑樹。
總結:紅黑樹的5個特性約束了該樹的平衡效能:即從根到葉子的最長可能路徑不多於(<=)最短可能路徑的兩倍長。得到這個結論的理由是:紅黑樹中最短可能路徑是全部為黑色節點的路徑,最長可能路徑是紅黑相間的路徑。
紅黑樹 學習
紅黑樹筆記 紅黑樹是一顆二叉平衡樹,查詢不會破壞平衡性,所以和二叉平衡術查詢方式一致。從根節點開始查詢,為空就返回null,為當前值就返回,否則繼續向下查詢。如果當前節點的key為要查詢的節點的key,那麼直接返回當前值。如果當前節點的key大於要查詢的節點的key,那麼繼續向當前節點的左子節點查詢...
STL學習 紅黑樹學習
rb tree是被廣泛運用的平衡二叉搜尋樹。這裡只是記錄一下我個人覺得重要的東西,就沒有圖了。強烈推薦 stl原始碼分析 這本書,上面講得比較清楚。1 每個節點不是紅色就是黑色。2 根節點為黑色。3 如果節點為紅,則其子節點為黑。4 任一節點至bull 樹尾端 黑節點數必須相同。插入時紅黑樹的平衡是...
紅黑樹學習筆記
二叉樹,他的定義是每個節點最多只有兩個子樹 即左子樹和右子樹,當然也可以沒有子樹 如下圖是乙個簡單的二叉樹 對於這樣的資料結構,在c語言中通常這樣來定義結構體?1 2 3 4 5 typedefstruct binary tree binarytree 二叉搜尋樹,首先他也是乙個二叉樹,與二叉樹不同...