詳解紅黑樹和TreeMap的方法原理

2022-09-13 03:33:13 字數 1442 閱讀 5704

參考演算法導論  本文篇幅可能較長需要讀者慢慢理解,一步一步看。

什麼是紅黑樹?

我們要了解紅黑樹就必須知道紅黑樹是什麼?紅黑樹的紅和黑是什麼意思?紅黑樹能解決什麼樣的問題?紅黑樹解決這樣問題採用的是什麼方法?如果帶著這樣的問題去了解紅黑樹那麼就有助於我們清楚的認識紅黑樹。

首先對二叉樹進行講解(了解二叉樹的同學可以跳過)

首先二叉樹這種資料結構是為了解決資料進行檢索時快速的找到我們要找的資料。它區別於鍊錶在於檢索資料時所付出的時間代價是不一樣的。

從上圖我們可以清楚的了解什麼樣的資料選擇什麼樣的結構。比如我們要在集合中查詢整數n,那麼鍊錶最壞的情況下的時間複雜度為o(n),而二叉樹(二叉樹建立的合理矮胖矮胖的)則只需要o(lg n)。而資料量越來越大時二叉樹表現得越好。

但是當二叉樹的資料分布是這個樣子時那它和鍊錶的區別就很小了。

這樣的二叉樹結構顯然不是我們想要的,我們想要的是那種深度越小越好的,也就是矮矮胖胖的。

平衡二叉樹

平衡二叉樹通過在給元素插入時改變節點資料來使樹的結構變得矮平。

從b變為a就是平衡二叉樹的作用。

2-3平衡樹

首先我們看一看2-3-4平衡樹的結構。

其中根節點5是乙個2-節點   2-節點就是有乙個元素和兩個兒子

子節點7 9是乙個3-節點  3-節點就是有兩個元素和三個兒子

子節點10  11  12 是乙個4-節點 4-節點就是有三個元素四個兒子

這裡我們要研究的2-3節點沒有4-節點那麼為什麼要看2-3-4平衡樹呢?

原因就是我們要解決的關鍵問題:插入元素時,2-3平衡樹是如何進行平衡的?

那麼我們把插入進行分類:

1.元素插入2-節點           

2.元素插入3-節點

1.3-節點沒有父節點

2.3-節點有乙個2-節點的父節點

3.3-節點有乙個3-節點的父節點

我們一種一種分析。(下圖是依次插入資料)

TreeMap 紅黑樹 原始碼解析

紅黑樹是一種平衡二叉搜尋樹。它可以在o log n 的時間內完成查詢,插入和刪除。二叉搜尋樹 左邊的節點都小於父節點,右邊的節點都大於父節點。平衡二叉樹 任意左右兩個子樹的葉子節點的高度相差不超過1。關於二叉樹的分類可以看筆者的這篇文章 一句話弄懂常見二叉樹型別 分成這兩個概念來看,紅黑樹就非常好理...

詳解紅黑樹

1.節點都有顏色 2.在插入和刪除的過程中,要遵循儲存這些顏色不同排列的規則。帶顏色的節點 在紅 黑樹中,每乙個節點或者是黑色的或者是紅色的。當然也可以是任意的兩種顏色 紅 黑規則 當插入或者刪除乙個新節點時,必須遵循一定的規則。它們被稱為紅 黑規則。遵循這些規則,樹就是平衡的。這些規則是 每乙個節...

紅黑樹詳解

在這片文章 裡講到了二叉查詢樹,很好很棒,就是有乙個缺點,當根節點最大或最小時,會出現單腿情況,最差成了鍊錶。於是乎,就是誕生了紅黑樹。紅黑樹是一種平衡樹,但是不追求絕對的平衡 追求絕對的平衡會費時費資源 追求一定的平衡。2.紅黑樹的生成規則 1 把二叉樹所以節點先弄成紅色 2 根據紅黑樹的性質 生...