紅黑樹總結

2021-10-22 16:35:05 字數 2082 閱讀 9143

節點是紅色或黑色;

根節點是黑色;

不能有連續的兩個紅色節點。

從任一節點到其每個葉子的簡單路徑都包含相同數目的黑色節點

由上面的性質4可以得到,紅黑樹中新插入的節點必須是紅色節點。

先按照二叉搜尋樹的插入方式,找到合適的插入位置。並且插入的節點應為紅色。

如果新插入節點的父節點本身就是紅色,就和性質3發生了衝突。紅黑樹的插入,需要解決的問題就是「紅紅」問題。下面只考慮出現紅紅問題後的解決辦法

規定新插入的節點是n,它的父節點是p,它的父節點的兄弟節點是u,它的祖父節點是gp,曾祖父節點是ggp。

父節點的兄弟節點u是紅色:

不需要旋轉,直接把父節點p和叔叔節點u變成黑色,祖父節點gp變成紅色。而如果曾祖父節點也是紅色,又違背了性質3,於是需要繼續遞迴向上處理。

叔叔節點u是黑色。

n和p都是左孩子節點或者都是右孩子節點。

以祖父節點gp為支點旋轉,然後修改p為黑色,修改gp為紅色。

n和p乙個是左孩子節點,乙個是右孩子節點。

先以p節點為支點進行旋轉,然後轉化成了情況2.1。

先執行二叉搜尋樹的刪除操作。先要找到想刪除的節點,如果它正好是葉子節點,那麼就直接刪除它;如果它不是葉子節點,需要找到它的後繼節點(也可能是它的前驅節點),這個節點才是真正需要刪除的節點。

這個真正需要刪除的節點,要麼是葉子節點,要麼只有乙個孩子節點。假如這個節點是紅色,考慮到它的父節點必然是黑色,它的孩子節點(假如有的話)必然也是黑色,那麼刪除它既不違背性質4,也不會違背性質3,可以直接刪除。而如果它是黑色,刪除它必然會違背性質4,有可能違背性質3。所以下面的討論都只考慮待刪除節點是黑色,先進行旋轉、變色等操作,然後再執行刪除。

規定真正需要刪除的節點是n,它的兄弟節點是s,父節點是p,祖父節點是gp,兄弟節點的孩子節點是sl和sr。

兄弟節點是黑色

兄弟節點的兩個孩子都是黑色

情況1.1.1:

父節點是黑色:

直接將兄弟節點變成紅色。(強行讓兄弟節點那支減少乙個黑節點)但是對於父節點這一支,相當於少了乙個黑色節點。於是將p看成新的n,遞迴向上進行調整

情況1.1.2:

父節點是紅色:

交換p和s的顏色。這樣s支減少了乙個黑色節點,但是對p支,黑色節點保持不變。

兄弟節點的乙個孩子是紅色(根據性質,另乙個節點肯定是空或者也是紅色)

情況1.2.1:

兄弟節點和紅色侄子節點都是左孩子節點:

以p為支點右旋,並且將sl變成黑色,交換s和p的顏色。這樣增加了右支的黑色節點數量。

情況1.2.2:

兄弟節點和紅色侄子節點乙個是左孩子,乙個是右孩子

以為s為支點左旋,並且交換s和sr的顏色,轉換為情況1.2.1繼續處理。

兄弟節點為紅色

以p為支點右旋,然後交換s和p的顏色(保證了整支的黑色節點不減少)。將sr看做新的s,轉化為情況1.1.2

紅黑樹總結

r b tree,全稱是red black tree,又稱為 紅黑樹 它一種特殊的二叉查詢樹。紅黑樹的每個節點上都有儲存位表示節點的顏色,可以是紅 red 或黑 black r b tree,全稱是red black tree,又稱為 紅黑樹 它一種特殊的二叉查詢樹。紅黑樹的每個節點上都有儲存位表示...

紅黑樹總結

關鍵特點 1 根是黑色 2 null是黑色 3 沒有相連的紅色 4 乙個節點到null所有路徑上所有黑色節點數量相等 最高高度2log n 1 最壞時間複雜度log n 插入 自底向上插入 需要用乙個棧儲存搜尋路徑經歷過的節點。1 按照二叉搜尋樹插入,新插入點為紅色。2 如果新插入節點的父親是黑色,...

紅黑樹知識總結

紅黑樹 red black tree 是一種自平衡二叉查詢樹,所有資料塊都儲存在節點中,在進行插入和刪除操作時通過特定操作保持二叉查詢樹的平衡,從而獲得較高的查詢效能,它雖然是複雜的,但它的最壞情況執行時間也是非常良好的,並且在實踐中是高效的 它可以在o log n 時間內做查詢,插入和刪除,這裡的...