紅黑樹到底是啥

俺是非科班出身,所以理解紅黑樹用了好久,下面說說自己的理解,如果有什麼錯誤的地方(肯定是有的。。。),輕噴。
首先,我們知道查詢最好的數據結構是平衡二叉樹,但是對於平衡二叉樹(所有節點的左右子樹高度差不超過1)。不管我們是執行插入還是刪除操作,只要不滿足上面的條件,就要通過旋轉來保持平衡,而旋轉非常耗時的。
所以我們旋轉一種不追求那麼平衡的二叉樹(紅黑樹),用相同數量的黑球間插入紅球來控制各路徑的相對長度不會差出一倍。
總之,紅黑樹就是平衡二叉樹的低配版本(任何節點左腿右腿不會差一倍)。

紅黑樹規則

  1. 每個節點非紅即黑
  2. 根節點是黑的;
  3. 每個葉節點(葉節點即樹尾端NULL指針或NULL節點)都是黑的; 這裏
  4. 如圖所示,如果一個節點是紅的,那麼它的兩兒子都是黑的;(黑色節點可以連續!但是數量差距需要用紅色的來醜)
  5. 對於任意節點而言,其到葉子點樹NULL指針的每條路徑都包含相同數目的黑節點;(不然只能旋轉替換連接)
  6. 每條路徑都包含相同的黑節點; 弱平衡關鍵

通過對任何一條從根到葉子的路徑上各個節點着色的方式的限制,紅黑樹確保沒有一條路徑會比其它路徑長出兩倍(因爲總數量等於紅+黑,黑數量是一致的,紅的比黑的少),因此,紅黑樹是一種弱平衡二叉樹(由於是弱平衡,可以看到,在相同的節點情況下,AVL樹的高度低於紅黑樹),相對於要求嚴格的AVL樹來說,它的旋轉次數少,所以對於搜索,插入,刪除操作較多的情況下,我們就用紅黑樹。

二叉樹旋轉(用來調節左右高度)
在這裏插入圖片描述

與平衡二叉樹相比:
新插入節點是紅色節點,所以如果父節點是黑的就直接插入了(注意這裏是不管空的葉子節點的,葉子節點相當於添頭),不用管別的樹高

在這裏插入圖片描述

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