紅黑樹插入

2021-08-04 14:38:44 字數 1317 閱讀 5938

一、什麼是紅黑樹

紅黑樹(red black tree) 是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。

紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或black。

一棵紅黑樹是滿足下面紅黑性質的二叉搜尋樹:

1、每乙個結點或是紅結點或是黑結點

2、根節點是黑色的

3、每個葉節點(nil)是黑色的

4、如果乙個結點是紅色的,則它的兩個子節點都是黑色的

5、對每個結點,從該節點到其所以後代葉節點的簡單路徑上,均包含相同數目的黑色結點

二、旋轉操作

由於樹的插入和刪除操作會破壞紅黑樹的性質,為了維護這些性質,必須要改變樹中某些結點的顏色以及指標結構,指標結構的修改是通過旋轉來完成的,這是一種能保持二叉樹搜尋性質的搜尋樹區域性操作。

旋轉有兩種。左旋和右旋

/**

* x左旋轉

* @param root

* @param x

*/public void left_rotate(node root,node x)

y.p = x.p;

if(x.p==null)else if(x==x.p.left)else

y.left = x; //讓x成為y的左子樹

x.p = y; }

/*** x右旋轉

* @param root

* @param x

*/public void right_rotate(node root,node x)

y.p = x.p;

if(x.p==null)else if(x == x.p.left)else

y.right = x;

x.p = y;

}

三、插入操作

基本上和二叉搜尋樹的插入一樣,只是將插入的z的顏色著紅

public void rb_insert(node root,node z)else if(z==z.p.right)else

}elseelse if(z==z.p.left)else

}} root.color = "black";

}

參考《演算法導論》

紅黑樹(插入)

紅黑樹的插入操作相對刪除操作比較簡單。紅黑樹要滿足 任一節點至null的任何路徑,所含黑節點數必須相同。所以,為了滿足此性質,插入節點應該為紅色。如果插入節點的父親為黑色,則不需要進行調整,若為紅色,有三種情況需要討論。1.父節點為紅色,叔節點為紅色 對於這種情況,同時改變父 叔節點顏色為黑色,並將...

紅黑樹 插入

一 滿足下面幾個條件的二叉搜尋樹,稱為紅黑樹 1.任何乙個節點都被著色 紅色或是黑色。2.根節點是黑色的。3.所有的nil節點都看成黑色 nil節點是就是乙個假想的或是無實在意義的節點,所有應該指向null的指標,都看成指向了nil節點。包括葉節點的子節點指標或是根節點的父指標 4.如果乙個節點是紅...

紅黑樹 插入

嗯。總是忘。再查以前做的筆記也好麻煩。於是將以前做的筆記重新整理 再整合其他優質內容,存到部落格上吧,方便以後看。紅黑樹是許多 平衡 搜尋樹的一種,可以保證在最壞情況下基本動態操作集合的時間複雜度為o lgn 1 紅黑樹的性質 以上節選自 演算法導論 第三版 首先可以看到,紅黑樹是一顆二叉搜尋樹,那...