紅黑樹
(全稱:紅黑二叉查詢樹)
儲備知識:你應該有二叉樹、二叉查詢樹(bst)、2-3樹的預備知識來學習本節。
背後思想:將乙個標準二叉查詢樹和一些額外的資訊來表示2-3查詢樹
我們看這張圖,圖中上部分是乙個3節點 下面是乙個有紅、黑兩種顏色的連線
其中左斜紅連線相當於 3節點 。
紅黑樹滿足條件:
紅鏈結均為左連線
沒有乙個節點和兩個紅鏈結相連
該樹完美黑色平衡的,即任意空連線到根節點路徑上的黑鏈結數量相等
(反著看就是2-3樹到紅黑樹的演變過程)
我們規定,由父節點指向當前節點的連線的顏色 儲存在node資料變數color中
例如下圖:e黑色、c紅色、j黑色、g紅色
旋**有時候我們會遇到紅鏈結是右連線怎麼辦?
如下圖,進行左旋轉,進行左、右引用的變換 以及 color的重賦值
右旋轉同理
雖然紅黑樹的紅鏈結都是左連線,那麼右旋轉為啥還要有呢?原因是在進行標準化的時候有)
一、向乙個只有乙個2節點的樹插入節點
(1)直接插入生成乙個3節點後,變成紅鏈結
(2)插入3節點後,生成3節點,但紅鏈結在右側,需要左旋轉進行紅黑樹的標準化
二、向樹底部的2節點插入新鍵
(2)如果新節點是父連線的右兒子,則需要一次左旋轉,如下圖
三、向乙個只有乙個3節點的樹插入 的3種情況
在第二種情況下,新鍵最小,會出現2條紅鏈結,我們進行如下變換(將2個紅鏈結變為黑,但將父節點的color變成紅)
四、向樹的底部3節點插入
總結:只要善於使用左旋轉、右旋轉、顏色變換3個特性 就能保證紅黑樹與2-3樹的一一對應關係。
二叉樹與紅黑樹
應用場景 1.伺服器io口,心跳包 2.多執行緒就緒,延時,等待,睡眠集合 二叉樹的遍歷分為 前序,中序,後序,按層次 如何檢測二叉樹資料對不對?可以使用中序遍歷,因為中序遍歷可以通過對映的方法來判斷二叉樹的資料對不對。如何解決最壞情況下的二叉樹?使用平衡二叉樹的話,在插入資料的時候,效能會非常差,...
二叉樹 紅黑樹
也就是說,二叉排序樹中,左子樹都比節點小,右子樹都比節點大,遞迴定義。根據二叉排序樹這個特點我們可以知道,二叉排序樹的中序遍歷一定是從小到大的,比如上圖,中序遍歷結果是 1 3 4 6 7 8 10 13 14 效能取決於 public class demo public static void m...
紅黑二叉樹
紅黑二叉樹 紅黑二叉樹的基本思想是想用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表述2 3樹。或者說,我們將3 結點表示為由一條左斜的紅色鏈結相 兩個2 結點其中之一是另乙個的左子節點 連的兩個2 結點。這種表示的優點 我們無需修改就可以直接使用標準二叉查詢樹的get ...