一、什麼是紅黑樹
紅黑樹(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 紅黑樹的性質 以上節選自 演算法導論 第三版 首先可以看到,紅黑樹是一顆二叉搜尋樹,那...