紅黑樹學習筆記 — (1) 定義、插入、刪除
紅黑樹(RBT)本質上是一種二叉查詢樹(BST),但它在二叉查詢樹的基礎上額外添加了一個標記(顏色),同時具有一定的規則。這些規則使紅黑樹保證了一種平衡,插入、刪除、查詢的最壞時間複雜度都為 O(logn)。
五個特性
- 每個節點是黑色或紅色
- 根節點(root節點)是黑色
- 葉子節點(null節點)是黑色
- 兩個相臨的節點不能都是紅色
- 根節點到葉子節點的黑高(BH)恆等
補充性質
-
任意一棵以根節點為黑色的子樹必定是RBT(遞迴定義)
-
不像平衡二叉樹(AVL)一樣永遠保持絕對平衡, 左(右)子樹的高度最多是右(左)子樹的兩倍, 左、右子樹黑高恆等
插入調整 (自底向上)
- 節點名稱定義
- 無需調整的情況 、三個case
- case1
- case2
- case3
AVL插入 VS RBT插入
刪除調整
待補充…
相關推薦
紅黑樹學習筆記 — (1) 定義、插入、刪除
紅黑樹(RBT)本質上是一種二叉查詢樹(BST),但它在二叉查詢樹的基礎上額外添加了一個標記(顏色),同時具有一定的規則。這些規則使紅黑樹保證了一種平衡,插入、刪除、查詢的最壞時間複雜度都為 O(logn)。 五個特性 每個節點是黑色或紅色 根節點(roo
紅黑樹 學習筆記1
本系列為演算法導論 第13章 紅黑樹 學習筆記 RB_Tree是一顆BST,滿足: 1. 結點顏色為紅或黑。 2. 根結點為黑色。 3. 每個葉結 (NIL) 點是黑色。 4. 不存在2個連續
紅黑樹學習筆記之插入操作
紅黑樹是234樹的一種,它是自平衡的二叉查詢樹,其優點為可以在㏒(n)時間內完成查詢,刪除和插入的動作。性質1:節點為有色的(紅色和黑色)性質2:根節點以及所有的葉子節點為黑色性質3:所有的紅色節點的父節點為黑色節點(黑色節點的父節點可以為紅色也可以為黑色)性質4:從任意節點
學習筆記1(三元運算、深淺拷貝、動態參數、全局變量與局部變量、set數據類型 )
img class blog war post 所有 註意 學習 gpo (三元運算、深淺拷貝、動態參數、全局變量與局部變量、set數據類型 ) set 數據類型--無序,不重復的集合 一.三元運算、三木運算--減少代碼量 name=“X1”if 條件 else “x2”
資料結構之紅黑樹個人筆記
作者:Sky Wang 於 2013-08-08  
紅黑樹學習
原博:點選開啟連結 紅黑樹的插入: 先按照二叉搜尋樹的方式插入,預設顏色為紅色(為什麼不是黑色?) 然後調整,使整棵樹更加均衡 eg: 這是一顆剛插入元素4的紅黑樹 當前結點4,當前結點的父結點是紅色,祖父結點的另一個子結點(叔叔結點)是紅色。 做法:將當前節點的父
紅黑樹分析筆記
閱讀本文的前提 1、知道二叉查詢樹的概念,插入、刪除和查詢操作; 2、知道二叉樹的左旋和右旋。 3、瞭解二叉平衡樹(AVL樹)的概念 紅黑樹的概念 紅黑樹是一種自平衡的二叉查詢樹,查詢、插入和刪除的平均時間複雜度是O(logN)。紅黑樹的每個節點都有一個顏色值(紅或黑),具有以下
Ubuntu作業系統學習筆記1(基本概念、常用指令)
一、Ubuntu 1、什麼是Ubuntu Ubuntu是一個以桌面應用為主的Linux作業系統。 2、Ubuntu特點 (1)操作簡單,方便使用,安裝人性化。 (2)系統安全方面:Ubuntu預設以普通使用者許可權登入,執行所有與系統相關的任務均需要sudo指令 (3)軟體更
資料結構的半夜----線段樹學習筆記1
蒟蒻奉上一篇線段樹學習筆記(ssfd)。 曾經有個ACM Au選手嘗試往我愚笨的腦袋死命資料結構,最後還是我自己一年腦容量略大之後才真正學進去的。(羞愧) 先借個圖 如圖所示,線段樹有以下性質: 1.線段樹本質是棵二叉樹. 2.線段樹每個節點是代表一個區間l~r,而每個節點的兩個兒子是將父節點的
tensorflow學習筆記1:tf.Variable、tf.get_variable與tf.get_variable、tf.variable_scope對比總結
** 0. 淺談tensorflow變數機制 ** tensorflow提供了通過變數名稱來建立或者獲取一個變數的機制。通過這個機制,在不同的函式中可以直接通過變數的名字來使用變數,而不需要將變數通過引數的形式到處傳遞,實現了變數共享。 ** 1. 對比tf.V
NanoPi NEO2 學習筆記 1:安裝系統、首次開機和一些設定
前幾天搞到了一塊NanoPi NEO2,A53的核心,512M記憶體,一個千兆網口,非常小的體積,質量也不錯,非常滿意,140元的價格可以買到這樣一塊ARM開發板也是非常划算了,非常適合低成本從微控制器轉向嵌入式學習 說實話這塊板子的資料和樹莓派相比較,可以說是少之又少,需要拿出十足的耐心,敢於折騰的決心去
演算法--我的紅黑樹學習過程
其他更多java基礎文章: java基礎學習(目錄) 學習資料: 紅黑樹詳細分析,看了都說好 紅黑樹刪除操作 碼圖並茂紅黑樹 紅黑樹從頭至尾插入和刪除結點的全程演示圖 閱讀前提 在研究集合類原始碼的時候,發現Map,Set裡面不少用到紅黑樹,為了能夠更順利的學習原始碼。我決定把紅黑樹知識惡
【C++】 string學習筆記1——定義和初始化string物件
string學習筆記1 c++初始化string物件的方式有以下幾種常見的方式。 /**定義和初始化string**/ string s1; ///預設的初始化,s1為一個空字串。 string s2 = s1;
演算法之紅黑樹簡單理解和定義
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 1000 typedef int ElemType; #define RED 0 #define BLACK
數據結構的半夜——線段樹學習筆記1
rip 需要 處理 i++ 結束 -i nta 包含 dbr 說過以後寫blog要嚴肅點,我現在就嚴肅地修改一下,刪冗余,精簡語言 線段樹,英文Segment Tree 這種樹形數據結構十分容易形象地繪成圖形 如圖所示,線段樹有以下性質: 線段樹本質是棵二叉樹. 線段樹
小程式開發 學習筆記-1 (邏輯層、檢視層)
1、小程式包含一個描述整體程式的 app 和多個描述各自頁面的 page。 2、頁面的.json只能設定 window 相關的配置項,以決定本頁面的視窗表現,所以無需寫 window 這個鍵 邏輯層(App Service) 1、小程式開發框架的邏
演算法導論 紅黑樹 學習 刪除(四)
學習演算法 還是建議看看演算法導論 演算法導論第三版 如果不看數學推導 僅看虛擬碼 難度還是適中 本系列只是記錄我的學習心得 和虛擬碼轉化程式碼的過程 深入學習 還是建議大家看看演算法書籍 教程更加系統。 本文參考演算法導論第13章節 紅黑樹 程式碼由本人寫成
C# 好程式碼學習筆記(1):檔案操作、讀取檔案、Debug/Trace 類、Conditional條件編譯、CLS
[TOC] 目錄: 1,檔案操作 2,Debug、Trace類 3,條件編譯 4,MethodImpl 特性 5,CLSComplianAttribute 6,必要時自定義類型別名 最近在閱讀 .NET Core Runtime 的原始碼,參考大佬的程式碼,學習編寫技巧和提高程式碼水平。學
數據結構 - 紅黑樹(Red Black Tree)插入詳解與實現(Java)
啟示 dpa con 技術分享 節點數 src 通知 一點 this 最終還是決定把紅黑樹的篇章一分為二,插入操作一篇,刪除操作一篇,因為合在一起寫篇幅實在太長了,寫起來都覺得累,何況是閱讀並理解的讀者。 紅黑樹刪除操作請參考 數據結構 - 紅黑樹(Red
紅黑樹之一(基本性質,插入節點)
平衡二叉樹(AVL)是一種具有很好的效能的排序二叉樹,但是也並不完美。如果所需要維護資料變化也比較頻繁,這就需要經常對ALV樹進行調整,由於平衡二叉樹對其子樹的限制太嚴格,因而進行插入或者刪除時經常需要對樹進行調整,而且插入時需要調整的子樹可能就是樹本身,這就需要較長的時間