1. 程式人生 > >紅黑樹,超強動靜圖詳解,簡單易懂

紅黑樹,超強動靜圖詳解,簡單易懂

寫在前面

紅黑樹,對很多童鞋來說,是既熟悉又陌生。學校中學過,只瞭解大概;工作中不怎麼使用,但面試又是重點。每次需要檢視紅黑樹內容時都很難以更生動形象的方式來理解其內容。沒錯,本文內容就是要解決這個問題,用簡單的語言,搭配靜圖和動圖(利用大腦圖形記憶方式),讓你對紅黑樹有更深入的瞭解和更清晰的記憶,希望小夥伴們再次遇到紅黑樹的問題不至於頭大,建議讀該文章姿勢: 開啟兩個頁面,一個頁面看圖片和內容,一個頁面看公式,像玩魔方一樣,多玩幾次就明白了

通過工具 (公眾號回覆「工具」—>那些可以提高效率的工具—>紅黑樹) 動態感受紅黑樹的轉換過程

俺家司令買完東西后,我倆經常會發生這樣的一段對話:

司令:你猜我買的這個多少錢?
我: 1000
司令: 高了
我: 500
司令: 低了:
我: 750
...... 直到最後猜中

這樣說大家應該已經猜到了是「二分查詢法」,通過這個例子我想要引出的是 樹,來看圖片


程式中的樹其實是我們日常看到的樹的倒影,或者發揮一下想象,倒影也可以是樹根

二叉查詢樹

二叉查詢樹,Binary Search Tree 「BST」,要想了解二叉查詢樹,我們首先看下二叉查詢樹有哪些特性呢?

  1. 某節點的左子樹節點值僅包含小於該節點值
  2. 某節點的右子樹節點值僅包含大於該節點值
  3. 左右子樹每個也必須是二叉查詢樹
    看個圖就輕鬆理解上面三句話的意思了:

上圖,結合二叉查詢樹的三條約束來看,非常好,沒有什麼問題。再來看一個圖,依舊符合上面三條約束,感覺有問題嗎?

  1. 這是一個走路一米六,一米八的樹
  2. 這是一個畸形的樹,大風一掛很可能被折斷的樹
    從程式的角度來說這個樹不夠平衡,查詢次數或時間複雜度 O(h)可能會隨著一條腿長無限增長

理科生在高中學習生物時學過一個關鍵字「去除頂端優勢」,通過去除植物頂端優勢,側芽會迅速生長,慢慢變得強壯和平衡, 紅黑樹其實就是去除二叉查詢樹頂端優勢的解決方案,從而達到樹的平衡

紅黑樹

紅黑樹,Red-Black Tree 「RBT」是一個自平衡(不是絕對的平衡)的二叉查詢樹(BST),樹上的每個節點都遵循下面的規則:

  1. 每個節點都有紅色或黑色
  2. 樹的根始終是黑色的 (黑土地孕育黑樹根,