background image

Notatki do wyk ladu 12

12 maj 2011

Drzewa czerwono-czarne

Operacje rotacji

Rotacja jest operacja

,

lokalna

,

na drzewie wyszukiwa´

n binarnych,

zachowuja

,

ca

,

uporza

,

dkownie inorder kluczy w drzewie. Lewa

,

rotacje

,

na we

,

´

zle wykonujemy tylko wtedy, gdy jego prawy syn nie

jest r´

owny nil[]. W wyniku rotacji staje sie

,

nowym korze-

niem poddrzewa, zostaje jego lewym synem, a lewy syn we

,

z la

zostaje prawym synem we

,

z la x. W procedurze LEFT-ROTATE

zak ladamy, ˙ze right[x]

̸nil[] oraz ˙ze ojcem korzenia jest nil[].

LEFT-ROTATE (T, x)

y

← right[x]

right[x]

← left[y]

p[lef t[y]]

← x

p[y]

← p[x]

if p[x] = nil[]

then root[]

← y

else if lef t[p[x]]

then lef t[p[x]]

← y

else right[p[x]]

← y

lef t[y]

← x

p[x]

← y

Typeset by

AMS-TEX

1

background image

2

Wstawianie

– wstawiamy we

,

ze l do drzewa stosuja

,

c modyfikacje

,

BST

– kolorujemy na czerwono

– aby zachowa´

c w lasno´

sci czerwono-czarne wywo lujemy procedure

,

RB-INSERT-FIXUP, kt´

orej zadaniem jest przekolorowanie

we

,

z l´

ow i wykonanie rotacji.

RB-INSERT(T, z)

y

← nil[]

x

← root[]

while x

̸nil[]

do y

← x

if key[z< key[x]

then x

← left[x]

else x

← right[x]

p[z]

← y

if nil[]

then root[]

← z

else if key[z< key[y]

then lef t[y]

← z

else right[y]

← z

lef t[z]

← nil[]

right[z]

← nil[]

color[z]

← RED

RB-INSERT-FIXUP (T, z)

background image

3

Usuwanie

– usu´

n we

,

ze l tak jak w BST

– je˙zeli usunie

,

ty we

,

ze l jest czarny to wywo laj procedure

,

RB-DELETE-FIXUP

RB-DELETE(T, z)

if lef t[z] = nil[or right[z] = nil[]

then y

← z

else y

← TREE-SUCCESSOR(z)

if lef t[y]

̸nil[]

then x

← left[y]

else x

← right[y]

p[x]

← p[y]

if p[y] = nil[]

then root[]

← x

else if lef t[p[y]]

then lef t[p[y]]

← x

else right[p[y]]

← x

if y

̸z

then key[z]

← key[y]

skopiuj zawarto´

c pozosta lych p´

ol z do z

if color[y] = BLACK

then RB-DELETE-FIXUP (T, x)

return y