您的位置:首页 > 其它

算法导论学习笔记——第13章 红黑树

2015-05-27 18:26 337 查看
红黑树

红黑树是一种二叉查找树,但在每个结点上增加一个存储位存储结点的颜色,可以是red或black。通过对任意一条从根到叶的路径上结点颜色的限制,红黑树确保没有任何一条路径比其他路径长出两倍,因而是接近平衡的。

每个结点包含5个域,color,key,left,right,p

满足以下红黑性质:

1、每个结点是红色或黑色

2、根结点是黑色

3、每个叶结点(nil)是黑色

4、如果一个结点是红色,那么它的两个子结点都是黑色

5、对每个结点,从该结点到它每个子孙结点的路径上,黑结点数目相同

左旋转

LEFT-ROTATE(T,x)
y←right[x]
right[x]←left[y]
p[left[y]]←x
p[y]←p[x]
if p[x]==nil[T]
then root[T]←y
else if x=left[p[x]]
then left[p[x]]←y
else right[p[x]]←y
left[y]←x
p[x]←y


插入

RB-INSERT(T,z)
y←nil[T]
x←root[T]
while x!=nil[T]
do y←x
if key[z]<key[x]
then x←left[x]
else x←right[x]
p[z]←y
if y=nil[T]
then root[T]←z
else if key[z]<key[y]
then left[y]←z
else right[y]←z
left[z]←nil[T]
right[z]←nil[T]
color[z]←RED
RB-INSERT-FIXUP(T,z)

//保持红黑性质
RB-INSERT-FIXUP(T,z)
while color[p[x]]=RED
do if p[z]=left[p[p[z]]]
then y←right[p[p[z]]]
if color[y]=RED
then color[p[z]]←BLACK
color[y]←BLACK
color[p[p[z]]]←RED
z←p[p[z]]
else if z=right[p[x]]
then z←p[x]
LEFT-ROTATE(T,z)
color[p[z]]←BLACK
color[p[p[z]]]←RED
RIGHT-ROTATE(T,p[p[z]])
else ( same as then clause with "right" and "left" exchanged )
color[root[T]]←BLACK


删除

RB-DELETE(T,z)
if left[z]=nil[T] or right[z]=nil[T]
then y←z
else y←TREE-SUCCESSOR(z)
if left[y]!=nil[T]
then x←left[y]
else x←right[y]
p[x]←p[y]
if p[y]=nil[T]
then root[T]←x
else if y=left[p[y]]
then left[p[y]]←x
else right[p[y]]←x
if y!=z
then key[x]←key[y]
copy y's satellite data into z
if color[y]=BLACK
then RB-DELETE-FIXUP(T,x)
return y

//保持红黑性质
RB-DELETE-FIXUP(T,x)
while x!=root[T] and color[x]=BLACK
do if x=left[p[x]]
then ω←right[p[x]]
if color[ω]=RED
then color[ω]=BLACK
color[p[x]]←RED
LEFT-ROTATE(T,p[x])
ω←right[p[x]]
if color[left[ω]]=BLACK and color[right[ω]]=BLACK
then color[ω]←RED
x←p[x]
else if color[right[ω]]=BLACK
then color[left[ω]]←BLACK
color[ω]←RED
RIGHT-ROTATE(T,ω)
ω←right[p[x]]
color[ω]←color[p[x]]
color[p[x]]←BLACK
color[right[ω]]←BLACK
LEFT-ROTATE(T,p[x])
x←root[T]
else ( same as then clause with "right" and "left" exchanged )
color[x]←BLACK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: