紅黑樹是一顆二叉平衡查詢樹。
使用情況:不斷地有資料插入
性質:每個節點不是紅色就是黑色
根節點總是黑色
如果節點是紅色,則它的子節點必是黑色的
從根節點到葉節點的每條路徑,黑高相同
紅黑樹的三種修正方式①變色②左旋
③右旋
左旋操作:對x左旋,x的右子節點為y①y的左子節點賦值給x的右節點,並將x賦值給y左子節點(不為空)的父節點。
②x的父節點賦值給y的父節點,並更改父節點的指向(父節點左右子節點為y)。
③將y的左子節點設為x,x的父節點設定為y
右旋操作:對y右旋,y的左子節點為x
①將x的右子節點賦值給y的左子節點,同時將y賦值給x右子節點的父節點
②y的父節點賦值給x的父節點,同時更改父節點的指向(左右子節點為x)
③將x的右子節點設為y,y的父節點設為x
插入操作
①找到插入位置(二叉搜尋樹)
②判斷插入節點是左子節點還是右子節點
③插入節點,修正樹
注:第一次插入,不需要調整,只需要把根節點塗黑; 插入節點的父節點是黑色的,不需要調整
修正操作(插入節點的父節點是紅色的)
①插入節點的父節點和叔叔節點均為紅色
調整:將當前節點的父節點和叔叔節點塗黑,祖父節點塗紅,當前節點指向祖父節點繼續判斷。
②插入節點的父節點是紅色,叔叔節點是黑色,且插入節點是父節點的右子節點
調整:將當前節點的父節點作為新的節點,對其進行左旋操作。
③插入節點的父節點是紅色,叔叔節點是黑色,且插入節點是父節點的左子節點
調整:將當前節點的父節點塗黑,祖父節點塗紅,在祖父節點進行右旋。
根節點塗黑
變色》左旋》右旋
//對x進行左旋操作
public void
leftrotate
(rbnode
<
t> x)
//第二步:將
x的父節點
p(非空時
)賦值給
y的父節點,同時更新
p的子節點為
y(左或者右)y
.parent=x
.parent;if
(x.parent
!=null
)else
}else
//第三步:將
y的左子節點設為
x,x的父節點設為yy
.left=x
;x.parent=y
;}
//對y進行you
旋操作public void
rightrotate
(rbnode
<
t> y)
//2.將y
的父節點賦值給
x的父節點,同時更新父節點的左右指向x.
parent=y
.parent;if
(y.parent
==null
)else
else
}//3 x,y
的只想y
.parent=x
;x.right=y
;}
資料結構 紅黑樹
紅黑樹是二叉排序樹的改進,紅黑樹有幾個特點 1 節點只有2中顏色,紅色和黑色。2 根節點一定是黑色節點。3 紅色節點的子節點一定是黑色節點。4 黑色高度 根節點到每個葉子節點的路徑長度包含相同的黑色節點 相等。規定的插入的節點一定是紅色節點,紅黑樹的插入節點後需要調整的規則,插入節點需要調整的情況有...
資料結構 紅黑樹
一 紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在 電腦科學中用到的一種 資料結構 典型的用途是實現 關聯陣列 可以保證最長路徑不超過最短路徑的2倍,近似平衡。二 性質 性質1.節點是紅色或黑色。性質2.根節點是黑色。性質3 每個葉節點 nil節點,空節點 是黑色的。性質...
資料結構 紅黑樹
紅黑樹是一棵二叉搜尋樹,它在每個節點上增加了乙個儲存位來表示節點的顏色,可以是紅色也可以是黑色。通過對任何一條從根到葉子簡單路徑上的顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡。紅黑樹滿足下面的性質 1 每個節點,不是紅色就是黑色的 2 根節點是黑色的 3 如果乙個節點是紅色的...