紅黑樹筆記

2022-05-13 15:36:25 字數 1347 閱讀 5018

1.紅黑樹的根是黑的

2.所有外部節點[nil]都是黑的

3.其餘節點若為紅則只能有黑孩子//紅節點的兒子和父親都是黑色的

4.外部節點到根途經的黑節點數目相等//黑深度

外部節點是一類本不存在的節點 引入是為了方便分析和實現

紅黑樹的區域性結構無非四種

總是假設插入的節點是紅色 除非是根

1.雙紅缺陷

情況1:叔父節點是黑色

情況2:叔父節點是紅色

刪除情況1:要刪除的是紅節點 紅節點對黑高沒有影響 或者刪除的點是黑節點 但它至少有乙個紅兒子//x和它的兒子至少有乙個是紅的

雙黑缺陷:x和它的兒子全是黑的 刪除x後全樹的黑深度不再統一

bb-1:x的兄弟節點s為黑  且s至少有乙個紅孩子t

s直接繼承p的顏色

bb-2r:x的兄弟s為黑 且s的兩個孩子均為黑;p為紅

bb-2b:x的兄弟s為黑 且s的兩個孩子均為黑;p為黑

s染紅相當於做合併 

bb-3:x的兄弟s是紅色 其餘討論節點均為黑

經過一次zig 或 zag s變黑 p變紅  則此時情況轉變為 x擁有乙個黑兄弟s'的情況

既然p已經轉紅 那麼只可能出現bb-1和bb-2r  因此我們不會連續出現下溢

紅黑樹筆記 紅黑樹的插入操作

紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...

紅黑樹學習筆記

二叉樹,他的定義是每個節點最多只有兩個子樹 即左子樹和右子樹,當然也可以沒有子樹 如下圖是乙個簡單的二叉樹 對於這樣的資料結構,在c語言中通常這樣來定義結構體?1 2 3 4 5 typedefstruct binary tree binarytree 二叉搜尋樹,首先他也是乙個二叉樹,與二叉樹不同...

紅黑樹學習筆記

因為學習hashmap的時候,遇到了紅黑樹,故而複習哈,想深度學習的請轉到下面鏈結,作者 並茂的詳細講解了哈,分析的很清楚,覺得好的不忘給別人手動比心。30張圖帶你徹底理解紅黑樹 因為從這裡開始,是自己的學習筆記,從上面提到的文章中學習總結的,主要是為了給自己看,記錄哈,容易忘記,純概念,可能比較苦...