一顆紅黑樹需要同時滿足以下4個條件:
定義1:根節點是黑色的;
定義2:每個葉子節點都是黑色的空節點(nil),也就是說,葉子節點不儲存資料;
定義3:任何相鄰的節點都不能同時為紅色,也就是說,紅色節點是被黑色節點隔開的;
定義:4:每個節點,從該節點到達其可達葉子節點的所有路徑,都包含相同數目的黑色節點;
1、插入操作
紅黑樹規定,插入的節點必須是紅色的。而且,二叉查詢樹中新插入的節點都是放在葉子節點上。
①如果插入節點的父節點是黑色的,那我們什麼都不用做,它仍然滿足紅黑樹的定義。
②如果插入的節點是根節點,那我們直接改變它的顏色,把它變成黑色就可以了。
③除此之外,其他情況都會違背紅黑樹的定義,於是我們就需要進行調整,調整的過程包含兩種基礎的操作:左右旋轉和改變顏色。
2、插入操作的紅黑樹平衡調整
①顏色變換:紅變黑、黑變紅
②左旋、右旋
3、顏色變換和旋轉的規則
①需要變顏色的情況:爸爸、叔叔結點紅色
怎麼變:爸爸和叔叔變成黑色、爺爺變成紅色、指到爺爺結點分析旋轉變換規則
②左旋需要左旋的情況:爸爸紅色,叔叔黑色,當前節點為右子結點
怎麼變:以爸爸結點作為左旋
③右旋需要右旋的情況:爸爸紅色,叔叔黑色,當前節點為左子結點
怎麼變:爸爸變黑色、爺爺變紅色、以爺爺結點作為右旋
1、第一步是針對刪除節點初步調整。初步調整只是保證整棵紅黑樹在乙個節點刪除之後,仍然滿足最後一條定義的要求,也就是說,每個節點,從該節點到達其可達葉子節點的所有路徑,都包含相同數目的黑色節點;
2、第二步是針對關注節點進行二次調整,讓它滿足紅黑樹的第三條定義,即不存在相鄰的兩個紅色節點。
totally 沒看懂!!!
《資料結構與演算法》之紅黑樹
二叉查詢樹對於某個節點而言,其左子樹的節點關鍵值都小於該節點關鍵值,右子樹的所有節點關鍵值都大於該節點關鍵值。二叉查詢樹作為一種資料結構,其查詢 插入和刪除操作的時間複雜度都為 o logn 底數為 2。但是我們說這個時間複雜度是在平衡的二叉查詢樹上體現的,也就是如果插入的資料是隨機的,則效率很高,...
資料結構與演算法 十三 之紅黑樹
節點的刪除 紅黑樹是一種特殊的二叉搜尋樹 紅黑樹的性質 節點是紅色或黑色。根節點是黑色。每個葉子節點都是黑色的空節點 nil節點 從每個葉子到根的所有路徑上不能有兩個連續的紅色節點。從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。1 紅黑樹放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的...
資料結構之紅黑樹
定義 紅黑樹是一顆二叉查詢樹,樹中結點顏色或為紅色或為黑色,且滿足如下條件 根結點和所有外結點的顏色為黑色 根結點到任意乙個外結點的路徑上沒有連續的兩個紅色結點,若乙個結點是紅色,則其兩個兒子結點都是黑色 根結點到任意外結點的路徑上都有相同數目的黑色結點。1 插入操作 插入操作可以概括為以下幾個步驟...