12 Árbol rojo-negro - eafranco.com · 2020. 7. 5. · •solución: si x es rojo y padre y tío...

19
Tema 12: Árbol Rojo-Negro Estructuras de datos (Prof. Edgardo A. Franco) 1 M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Upload: others

Post on 20-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Tema 12: Árbol Rojo-Negro

Estructuras de datos (Prof. Edgardo A. Franco)

1M. en C. Edgardo Adrián Franco Martínez http://[email protected]@edfrancom edgardoadrianfrancom

Page 2: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Contenido• Introducción

• Propiedades

• Altura de un nodo

• Operaciones en el árbol

• Inserción• Caso 1

• Caso 2

• Caso 3

• Borrar• Caso 1

• Caso 2

• Caso 3

• Caso 4

• Rotaciones

• Rotación derecha

• Rotación izquierda

Árbol Binario I (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

2

Page 3: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Introducción• Los árboles de búsqueda binarios "equilibrados"

garantizan un tiempo de ejecución de O(log n)

• Un árbol rojo-negro es una estructura de datos enla cual cada nodo tiene un atributo adicional: colorque puede ser rojo o negro.

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

3

26

17 41

30 47

38 50

NIL

NIL

NIL NIL NIL NIL

NIL

NIL

Page 4: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Propiedades• Es un árbol binario de búsqueda

• Cada nodo tiene estado rojo o negro.

• La raíz es negra (esta condición se impone para simplificar algunas operaciones).

• Toda hoja es negra

• Se cumplen las condiciones: 1. Un nodo rojo tiene dos hijos negros.

2. Todo camino de la raíz a cualquier hoja pasa por el mismo número de nodos negros.

4

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

Page 5: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Altura de un nodo

▪ Altura de un nodo(h): el número de bordes en el camino máslargo a una hoja

▪ Altura de un nodo negro (bh): es igual a la altura del nodocuando sólo se tienen en cuenta los nodos negros (incluida lahoja)del subárbol cuya raíz es el nodo.

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

5

26

17 41

30 47

38 50

NIL NIL

NIL

NIL NIL NIL NIL

NIL

h = 4

h = 3

h = 2

h = 1

h = 1

h = 2

h = 1

bh = 2

bh = 2

bh = 1

bh = 1

bh = 1

bh = 1

bh = 1

Page 6: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Operaciones en el árbol

• Las operaciones de árbol de búsqueda binaria como MÍNIMO, MÁXIMO, SUCESOR, PREDECESOR y BÚSQUEDA se ejecutan en tiempo O(h) tiempo.

• En el árbol rojo-negro se ejecuta en un tiempo O(log n).

6

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

Page 7: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Inserción• La inserción de un nodo se realiza inicialmente igual que en un

árbol binario de búsqueda.

• Como las hojas deben ser negras, al nuevo nodo “x” se le da el color rojo.

7

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

z

y t

x

• De ésta manera no se viola la segunda condición (altura negra), aunque se puede violar la primera (el padre del nodo insertado puede ser rojo).

Page 8: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Caso 1

• Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede darse el problema de que el padre de z sea rojo y se viole de nuevo la primera condición.

• Iteración siguiente: El nodo que se comprueba ahora es z. 8

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

z

y t

xx

z

y t

Page 9: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Caso 2

• Solución: Se efectúa una rotación x-y. Esto no resuelve el problema, pero hace que ahora el nodo que hay que comprobar sea un hijo izquierdo y por lo tanto se aplique el caso siguiente.

• Iteración siguiente: El nodo que se comprueba ahora es y. Se caerá en el Caso 3. 9

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

z

y

tx

α

β

h

z

y t

x

α β

Page 10: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Caso 3

• Solución: Se efectúa una rotación(z-y), se cambia de color a z e y. Esto resuelve el problema.

• Iteración siguiente: El árbol cumple las condiciones. Se termina el bucle. 10

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

z

x

ty

h

zx

t

y

h

Page 11: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Borrar• La operación se lleva a cabo de la misma manera que en los árboles

binarios de búsqueda:• Se busca el nodo a borrar (como los nodos hojas son nodos nulos, en caso de

existir el nodo a borrar debe tener siempre dos hijos).

• Si es un nodo con dos hijos no nulos, se busca el mayor nodo (el más a la derecha) de su subárbol izquierdo (lo llamamos “x”), se intercambia sus datos con el nodo a borrar y se pasa a borrar el nodo “x”. Como es el nodo más a la derecha, su hijo derecho será nulo.

• Si el nodo suprimido “x” fuese negro, entonces, las ramas que pasen por “x” tienen un nodo negro menos, lo que viola la condición de los árboles rojo-negros. En este caso es necesario ajustar colores.

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

11

Page 12: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Caso 1

• El árbol sigue siendo rojo-negro, por lo que no hay que realizar ningún ajuste.

Estr

uct

ura

s d

e d

ato

s (P

rof.

Edga

rdo

A

. Fra

nco

)

12

z

tp

h

z

th

Page 13: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Caso 2

• Nodo “a” negro con hermano rojo(nodo d).

• A hermano se le pinta negro(nodo d), a padre de rojo(nodo b) y rotar a la izquierda.

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

13

b

a d

c e

d

c

eb

Page 14: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Caso 3

• Un nodo “a” y hermano negro(nodo d), el hijo derecho de hermano negro(nodo e) y el izquierdo rojo.

• Al hijo izquierdo del hermano (nodo c) se le pinta negro y a hermano de rojo (nodo d).

• Rotar a la derecha para equilibrar

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

14

b

a d

c e

b

d

c

e

Page 15: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Caso 4

• Un nodo “a” y hermano negro, el hijo derecho de hermano rojo(nodo e) y el izquierdo negro.• A padre se le pinta negro(nodo b), a hermano se pinta del color que tenía

padre(nodo d) y al hijo derecho de hermano(nodo e) también negro.

• Rotar a la izquierda para equilibrar alturas negras.

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

15

b

a d

c e

d

eb

c

Page 16: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Rotaciones• Las rotaciones son necesarias para que cumpla las

propiedades un árbol rojo-negro, ya que en los casos como inserción y eliminación al final hay ocasiones que se necesita restructurar el árbol, por lo cual existen la rotación:

• La Rotación izquierda

• La Rotación derecha

• Es la misma rotación que ocupan los arboles binarios de búsqueda.

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

16

Page 17: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Rotación derecha

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

17

p

x

C

BA

p

x

C

BA

Page 18: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Rotación izquierda

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

18

p

x

CB

A

p

x

CB

A

Page 19: 12 Árbol Rojo-Negro - eafranco.com · 2020. 7. 5. · •Solución: Si x es rojo y padre y tío son rojo, repintamos a estos últimos de negro y al padre de ambos de rojo. Puede

Animaciones Web

• https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

• http://tommikaikkonen.github.io/rbtree/#

• http://www.cs.armstrong.edu/liang/animation/web/RBTree.html

19

Estr

uct

ura

s d

e d

ato

s1

2 Á

rbo

l Ro

jo-N

egro

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez