【數&C++】圖解紅黑樹 — 插入節點

1. 什麼是紅黑樹

  • 紅黑樹,是一種二叉搜索樹,但在每個節點上增加一個存儲位表示節點的顏色,可以是Red或Black。
  • 通過對任何一條從根到葉子的路徑上各個節點着色方式的限制,紅黑樹確保沒有一條路徑會比其他路徑長出倆倍,因而接近平衡。

【性質】

  1. 每個節點不是紅色就是黑色;
  2. 根節點是黑色的 ;
  3. 樹中不會出現連續的紅節點;
  4. 每條路徑上黑色節點的數量都是相等的;
  5. 葉子節點指的是空節點。

2. 插入

  1. 按照二叉搜索樹規則插入新節點;
  2. 檢測新節點插入後,紅黑樹的性質是否遭到破環。

【紅黑樹插入的是紅節點】

  1. 如果父親是黑色,沒有破壞性質,結束
  2. 如果父親是紅色,破壞了性質3,祖父一定是黑色,關鍵看叔叔(三種情況)。

【約定】

  • cur爲當前節點,p爲父節點,g爲祖父節點,u爲叔叔節點;
    • 情況一:cur爲紅,p爲紅,g爲黑,u存在且爲紅;
    • 情況二:cur爲紅,p爲紅,g爲黑,u不存在/存在爲黑 -> 單旋;
    • 情況三:cur爲紅,p爲紅,g爲黑,u不存在/存在爲黑 -> 雙旋。

【分析情況時以父爲左,叔叔爲右】

  • 父爲左,叔叔爲右

    1. 情況一:變色、更新;
    2. 情況二:右單旋、變色;
    3. 情況三:先左單旋(變化後成情況二)、再右單旋、變色。
  • 父爲右,叔叔爲左

    1. 情況一:變色、更新;
    2. 情況二:左單旋、變色;
    3. 情況三:先右單旋(變化後成情況二)、再左單旋、變色。

【圖解:以父爲左,叔叔爲右分析】

  • 情況1
    在這裏插入圖片描述
  • 情況2在這裏插入圖片描述
  • 情況3在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章