紅黑樹RBTree學習筆記

什麼是紅黑樹RBTree:

概念:紅黑樹是一種特殊的平衡二叉樹,它具有自平衡的能力;能夠保證在最壞的情況下,基本的動態操作時間在O(logh),其中h代表紅黑樹的高度;
紅黑樹其實是在平衡二叉樹的每個結點上,增加一個存儲單元,用來標明顏色;

平衡二叉樹滿足下面條件 -------> 紅黑樹:

1. 每個結點不是黑的,就是紅的;
2. 根節點一定是黑的;
3. 葉節點NULL都是黑的;
4. 紅色結點的兩個子節點均是黑的;
5. 對每個結點,從該結點開始,到葉節點的所有路徑上,黑色結點的數目相等;

引理:若紅黑樹的內節點個數爲 n,那麼其高度最多爲2lg(n+1);*

紅黑樹在插入和刪除時間複雜度爲O(lgh),但是插入和刪除過程中有時會破壞其平衡特性,一般是通過左旋、右旋(改變指針指向)和變色來重新達到平衡狀態的;

左旋、右旋:
二叉平衡樹的左旋右旋操作

紅黑樹的刪除操作:

首先紅黑樹是二叉排序樹,按排序樹的方式刪除一個結點,有三種情況:

  1. 如果待刪除的結點是葉子結點,則直接刪除即可。
  2. 如果待刪除的結點只有一個孩子,則將父結點的指針指向它的孩子。
  3. 如果待刪除的結點有兩個孩子,則可以找它的後繼,將值覆蓋過來,之後情況轉變成刪除前驅或者後繼結點,情況變回1和2。
    二叉樹結點的前驅和後繼爲該二叉樹中序遍歷後,當前結點的前一個結點和後一個結點;
    再根據紅黑樹的性質,通過左旋、右旋和變色來讓紅黑樹重新達到平衡;
    看了很多文章,這篇給的圖示講的比較清楚,附上鍊接點擊此處

紅黑樹的插入操作:

情形1:被插入結點z(插入後塗成紅色)的叔叔y是紅色;
可以通過改變顏色來使得紅黑樹達到平衡;
在這裏插入圖片描述

情形2:被插入結點z的叔叔y是黑色,且被插入結點z是左孩子;
情形3:被插入結點z的叔叔y是黑色,且被插入結點z是右孩子;
case2可以通過左旋來變成case3,然後再通過右旋+變色,來重新達到平衡;
在這裏插入圖片描述

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