節點的刪除
紅黑樹是一種特殊的二叉搜尋樹
紅黑樹的性質:
節點是紅色或黑色。
根節點是黑色。
每個葉子節點都是黑色的空節點(nil節點)。
從每個葉子到根的所有路徑上不能有兩個連續的紅色節點。
從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
1、紅黑樹放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的時間複雜度相差不大的情況下,保證每次插入最多隻需要三次旋轉就能達到平衡,實現起來也更為簡單。
2、平衡二叉樹追求絕對平衡,條件比較苛刻,實現起來比較麻煩,每次插入新節點之後需要旋轉的次數不能預知。
首先以二叉搜尋樹的方式進行插入,指標指向插入節點,且設定為紅色。
變顏色:當前節點的父親是紅色,且他的祖父節點的另乙個子節點也是紅色(叔叔節點):
把父節點設為黑色。
把叔叔節點也設定成黑色。
把爺爺節點設為紅色。
把指標指向爺爺節點,重新進行上述操作。
左旋:當父節點是紅色,叔叔是黑色的時候,且當前節點是右子樹,指標指向其父節點,然後以其父節點左旋。
右旋:當父節點是紅色,叔叔是黑色的時候,且當前節點是左子樹,指標指向其父節點,然後:
將父節點變成黑色
將祖父節點變成紅色
以祖父節點右旋
將節點6置為紅色,插入二叉搜尋樹。
判斷6的父節點7與叔叔節點13都是紅色,那麼執**況1:父節點和叔叔節點變成黑色,爺爺節點變成紅色,然後將指標指向爺爺節點。
此時指標在12,其父節點5是紅色,叔叔節點30是黑色,且是父節點的右子樹,執**況2,指標指向5,以5點為中心左旋。
此時5的父節點是紅色,叔叔節點是黑色且是父節點的左子樹,指標指向父節點12,父節點變成黑色,爺爺節點變成紅色,以爺爺節點為中心右旋。
這就是最後的紅黑樹。
將紅黑樹內的某乙個節點刪除。需要執行的操作依次是:首先,將紅黑樹當作一顆二叉查詢樹,將該節點從二叉查詢樹中刪除;然後,通過"旋轉和重新著色"等一系列來修正該樹,使之重新成為一棵紅黑樹。
《資料結構與演算法》之紅黑樹
二叉查詢樹對於某個節點而言,其左子樹的節點關鍵值都小於該節點關鍵值,右子樹的所有節點關鍵值都大於該節點關鍵值。二叉查詢樹作為一種資料結構,其查詢 插入和刪除操作的時間複雜度都為 o logn 底數為 2。但是我們說這個時間複雜度是在平衡的二叉查詢樹上體現的,也就是如果插入的資料是隨機的,則效率很高,...
資料結構之紅黑樹
定義 紅黑樹是一顆二叉查詢樹,樹中結點顏色或為紅色或為黑色,且滿足如下條件 根結點和所有外結點的顏色為黑色 根結點到任意乙個外結點的路徑上沒有連續的兩個紅色結點,若乙個結點是紅色,則其兩個兒子結點都是黑色 根結點到任意外結點的路徑上都有相同數目的黑色結點。1 插入操作 插入操作可以概括為以下幾個步驟...
資料結構查詢演算法之紅黑樹
紅黑樹對於結點的顏色設定不是任意的,需滿足以下性質的二叉查詢樹才是紅黑樹 紅黑樹中每個結點都有各自的黑高度,整棵樹也有自己的黑高度,即為根結點的黑高度,例如圖 1 中的紅黑樹的黑高度為 3。對於一棵具有 n 個結點的紅黑樹,樹的高度至多為 2lg n 1 所以紅黑樹的時間複雜度為o logn 紅黑樹...