參考算法導論 本文篇幅可能較長鬚要讀者慢慢理解,一步一步看。算法
什麼是紅黑樹?數據結構
咱們要了解紅黑樹就必須知道紅黑樹是什麼?紅黑樹的紅和黑是什麼意思?紅黑樹能解決什麼樣的問題?紅黑樹解決這樣問題採用的是什麼方法?若是帶着這樣的問題去了解紅黑樹那麼就有助於咱們清楚的認識紅黑樹。blog
首先對二叉樹進行講解(瞭解二叉樹的同窗能夠跳過)class
首先二叉樹這種數據結構是爲了解決數據進行檢索時快速的找到咱們要找的數據。它區別於鏈表在於檢索數據時所付出的時間代價是不同的。二叉樹
從上圖咱們能夠清楚的瞭解什麼樣的數據選擇什麼樣的結構。好比咱們要在集合{1,2,3,4····10000}中查找整數n,那麼鏈表最壞的狀況下的時間複雜度爲O(n),而二叉樹(二叉樹創建的合理矮胖矮胖的)則只須要O(lg n)。而數據量愈來愈大時二叉樹表現得越好。方法
可是當二叉樹的數據分佈是這個樣子時那它和鏈表的區別就很小了。im
這樣的二叉樹結構顯然不是咱們想要的,咱們想要的是那種深度越小越好的,也就是矮矮胖胖的。鏈表
平衡二叉樹數據
平衡二叉樹經過在給元素插入時改變節點數據來使樹的結構變得矮平。db
從b變爲a就是平衡二叉樹的做用。
那麼平衡二叉樹和紅黑樹有什麼關係呢?紅黑樹就是一種平衡二叉樹,它是經過改變元素節點時經過左旋和右旋進行的。那麼仍是倒回來,紅是啥?黑是啥?左旋是啥?右旋是啥?這都tm是啥?哈哈。要想了解就要了解紅黑樹相關的另外一種2-3樹,紅黑樹是經過2-3樹演化而來。
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-節點的父節點
咱們一種一種分析。(下圖是依次插入數據)