資料結構1 紅黑樹

2021-08-18 07:21:21 字數 1636 閱讀 8795

紅黑樹是一顆二叉平衡查詢樹。

使用情況:不斷地有資料插入

性質:

每個節點不是紅色就是黑色

根節點總是黑色

如果節點是紅色,則它的子節點必是黑色的

從根節點到葉節點的每條路徑,黑高相同

紅黑樹的三種修正方式

①變色②左旋

③右旋

左旋操作:對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 如果乙個節點是紅色的...