關於紅黑樹的理解

前言

    關於紅黑樹,他其實是二叉查找樹的一種晉級,我們都知道一點,二叉查找樹是有缺陷的,是可能會出現線性查找這種性能低下的情況發生的,那麼紅黑樹本質上就是一種自平衡二叉查找樹,他的查找最長路徑最大不超過最短路徑的2倍,原因是在於紅黑樹本身的規則決定的,事實上由於紅黑樹優良的性能,JDK1.8中的hashmap就用到了紅黑樹這樣的數據結構。

紅黑樹的規則

    上文也說了,紅黑樹是個自平衡的二叉查找樹,那麼這種數據結構是如何實現的呢?這裏就要去了解一下紅黑樹的五個特性:
1、節點是紅色或黑色(紅黑樹嘛)(笑)
2、根節點都是紅色(相對的)
3、每個葉子的節點都是黑色的空節點(nill)(重要)
4、每個紅色節點的兩個節點都是黑色的(重要)
5、從任意節點到其每個葉子的所有路徑都包含相同的黑色節點(核心)
    上文的括號裏面的字是博主自己的見解,各位看官見仁見智。那麼前三條我們就不再多加闡述,甚至第四條也一樣,博主在學習的時候第五條性質着實迷了一陣,簡單用大白話來講就是,紅黑樹中的根節點到任意子節點的 黑色節點數目要一致,前面四個定義好理解,那麼第五個定義該如何理解呢?第五個定義又名黑高,因爲前四個定義的特點,我們可以知道一個紅黑樹所擁有的節點就是他的最短路徑的長度,我們記爲N,那麼這個第五個定義,也就定義了一件事情,那就是最長的長度最多不能超過2N ,這樣就保持了紅黑樹的自平衡二叉查找樹的特性,規避了出現單腿過長的情況發生,大大提高了查找性能。
當然我們也可以反着來推,如果一個紅黑樹的黑高是h,那麼這個紅黑樹的高度,至多是2h-1。同樣的,若紅黑樹的高爲h,那麼黑高至少爲h/2,且紅高樹內頂點個數n一定大於等於2的h/2-1次冪。
以上是結構,那麼我們來看一下,這個插入刪除操作是如何處理的
插入,需要兩步操作,變色和旋轉(左旋轉和右旋轉,左是柚子,右是左子)
關於旋轉來說一下,我看了一些博客 和大神們的分析,我先用自己的話來說,先從插入節點是紅的,黑的來說吧,首先我們要了解這個紅黑樹的第5個性質(黑高),這個性質決定了這個要插入的節點的顏色,插入的節點需要是紅色節點纔可以.

待續(不發表出去的話,我草稿箱都滿了(笑))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章