You are on page 1of 19

Contenidos

Estructuras de Datos y Algoritmos


Tema 4. rboles binarios

rboles
rboles binarios
rboles binarios de bsqueda
rboles AVL

Ivn Cantador
David Vallet, Jos R. Dorronsoro
Escuela Politcnica Superior

Universidad Autnoma de Madrid

Contenidos

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Grafos. Definicin

Un grafo es una estructura de datos G = (V, R) compuesta


de:

rboles
rboles binarios
rboles binarios de bsqueda
rboles AVL

Un conjunto V de vrtices (nodos)


Un conjunto R de ramas (arcos), conexiones entre los vrtices
de V

Ejemplo de grafo (dirigido)


3

2
6

4
1
5

V= {1, 2, 3, 4, 5, 6}
R= {(1,4), (1,5), (1,6), (2,3),, (5,1), (6,2)}

Un grafo es una EdD general, muy rica y flexible


Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Grafos. Caminos

Tiene un nico nodo, denominado raz, sin ramas incidentes


Cada nodo raz recibe una sola rama
Cualquier nodo es accesible desde la raz

Ejemplo

Nodos
terminales
(hojas)

raz

Un rbol ordenado con raz es un grafo tal que:

Un camino de un grafo G = (V, R) es una secuencia de


nodos de V en los que cada nodo es adyacente al
siguiente mediante un arco de R
Ejemplo
2

rboles. Definicin

7
1

V= {1, 2, 3, 4, 5, 6}
R= {(1,4), (1,5), (1,6), (2,3),, (5,1), (6,2)}
Caminos: {1, 6, 2, 3}, {5, 1, 4},

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

6
9
9
7

6
10

10

rboles. Altura y profundidad

La altura de un rbol es 1 ms la longitud del camino


ms largo que conecta la raz a una hoja
La profundidad (nivel) de un nodo es el nmero de
ramas entre el nodo y la raz
10

La profundidad de un rbol es el mximo nmero de ramas


entre la raz una hoja del rbol (es -1 si el rbol est vaco)

Ejemplo
1

T
2

6
9
7

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

10

Nodos
intermedios

9
7

1
2

Un sub-rbol de un rbol T es un subconjunto de nodos


de T conectados mediante ramas de T
Cada nodo de un rbol T junto con sus hijos da lugar a
nuevo sub-rbol T
4

10

rboles. Sub-rboles

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

10

altura(T) = 1 + 3 = 4
profundidad(1) = 0
profundidad(5) = 1
profundidad(7) = 3

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles. rboles equilibrados

Un rbol est equilibrado si para todo nodo el nmero


de niveles de sus sub-rboles no difieren en ms de una
unidad
Un rbol con mximo nmero k de hijos por nodo est
perfectamente equilibrado si todo nodo tiene k hijos

rbol equilibrado

Contenidos

rboles
rboles binarios
rboles binarios de bsqueda
rboles AVL

rbol perfectamente equilibrado


Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Definicin

10

Un rbol binario (AB) es un rbol ordenado con raz tal


que:
cada nodo tiene a lo sumo 2 hijos

Ejemplo
raz

raz

rboles binarios. Definicin


En un AB:
Todo nodo excepto el raz tiene un nodo padre
Todo nodo tiene a lo sumo 2 nodos hijos: hijo izquierdo e hijo
derecho

padre
de X
X

nodos
intermedios
hojas

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

hojas

hijo
izquierdo
de X

hijo
derecho
de X

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

11

rboles binarios. Definicin

12

El hijo izquierdo de la raz forma un nuevo rbol con dicho hijo


como raz
El hijo derecho de la raz forma un nuevo rbol con el dicho
hijo como raz
raz
sub-rbol
derecho

raz
sub-rbol
izquierdo

13

Un rbol se puede recorrer de distintas formas, pero


siempre desde la raz
Para el recorrido normalmente se usa la propiedad
recursiva de los rboles
Cuando se aplica un algoritmo de visita de rboles se
implementa la funcin "visitar" que puede realizar
distintas operaciones sobre cada nodo

Propiedad recursiva de los AB

sub-rbol
izquierdo

rboles binarios. Recorrido

sub-rbol
derecho

Visitar un nodo puede ser p.e. imprimir el contenido del nodo


3
o liberar su memoria
1

6
2

5
4

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Recorrido


Recorridos en profundidad
preorden, postorden, inorden
Ejemplo de aplicacin (en grafos): encontrar componentes
conexas

Recorrido en achura
recorrido por nivel
Ejemplos de aplicacin (en grafos): camino ms corto entre
dos nodos, crawling Web

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

14

rboles binarios. Recorrido en profundidad: preorden


Preorden = orden previo
Desde la raz y recursivamente:
1. Visitamos un nodo n
2. Recorremos en orden previo el hijo izquierdo de n
3. Recorremos en orden previo el hijo derecho de n

Ejemplo
visitar = printf del contenido de un nodo
resultado: C A B F E D G

F
B

E
D

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

15

rboles binarios. Recorrido en profundidad: preorden

16

Algoritmo recursivo

Postorden = orden posterior


Desde la raz y recursivamente:

Caso base / condicin de parada


Caso general / llamada recursiva

Pseudocdigo
abPrerden(ArbolBinario T) {
// rbol vaco
si abVacio(T) == TRUE
volver
else
visitar(T) // printf
abPreorden(izq(T))
abPreorden(der(T))
volver
}

rboles binarios. Recorrido en profundidad: postorden 17

1. Recorremos en orden posterior el hijo izquierdo de n


2. Recorremos en orden posterior el hijo derecho de n
3. Visitamos un nodo n

3
1

Ejemplo

6
2

visitar = printf del contenido de un nodo


resultado: B A D E G F C

Observaciones

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Recorrido en profundidad: postorden 18

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Recorrido en profundidad: inorden


Inorden = orden medio
Desde la raz y recursivamente:

Pseudocdigo compacto

abPostorden(ArbolBinario T) {
// rbol no vaco
si abVacio(T) == FALSE:
si abVacio(izq(T)) == FALSE:
abPostorden(izq(T))
si abVacio(der(T)) == FALSE:
abPostorden(der(T))
visitar(T)
}

E
D

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Pseudocdigo ms eficiente

F
B

rbol vaco no Nene nodos


rbol de un nodo un nodo raz sin hijos
Asociamos nodo raz de un subrbol; Nl para la recursin

abPostorden(ArbolBinario T) {
// rbol no vaco
si abVacio(T) == FALSE:
abPostorden(izq(T))
abPostorden(der(T))
visitar(T)
}

1. Recorremos en orden posterior el hijo izquierdo de n


2. Visitamos un nodo n
3. Recorremos en orden posterior el hijo derecho de n

3
1

6
2

5
4

Ejemplo
7

visitar = printf del contenido de un nodo


resultado: A B C D E F G

F
B

E
D

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

19

rboles binarios. Recorrido en profundidad: inorden

20

21

Recorrido en anchura = recorrido por nivel


Algoritmo

Pseudocdigo compacto
abInorden(ArbolBinario T) {
// rbol no vaco
si abVacio(T) == FALSE:
abInorden(izq(T))
visitar(T)
abInorden(der(T))
}

rboles binarios. Recorrido en anchura

Recorre de arriba abajo y de izquierda a derecha


Nunca recorre un nodo de nivel i sin haber visitado los de nivel
i-1
Implementacin mediante el TAD Cola, sin recursividad

3
1

Pseudocdigo ms eficiente
abInorden(ArbolBinario T) {
// rbol no vaco
si abVacio(T) == FALSE:
si abVacio(izq(T)) == FALSE:
abInorden(izq(T))
visitar(T)
si abVacio(der(T)) == FALSE:
abInorden(der(T))
}

6
2

Ejemplo
A

F
B

E
D

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Recorrido en anchura

resultado: C A F B E G D

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

22

rboles binarios. Recorrido en anchura

23

Ejemplo

Pseudocdigo
Recorre de arriba abajo y de izquierda a derecha
Nunca recorre un nodo de nivel i sin haber visitado los de nivel
i -1
abAnchura(ArbolBinario T) {
colaInicializar(Q)
colaInsertar(Q, T)
mientras colaVacia(Q) == FALSE:
colaExtraer(Q, T)
visitar(T)
para cada hijo H de T:
colaInsertar(Q, H)
}

abAnchura(ArbolBinario T) {
colaInicializar(Q)
colaInsertar(Q, T)
mientras colaVacia(Q) == FALSE:
colaExtraer(Q, T)
visitar(T)
para cada hijo H de T:
colaInsertar(Q, H)
}

Q
C

C
A

F
B

D
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

VISITAR

AF

FB

BEG

EG

7D

D
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. rboles de expresin

24

rboles binarios. rboles de expresin

25

Los sub-rboles de un AdE son AdE


Un rbol de Expresin (AdE) es un rbol binario donde:

operador

Los nodos tienen operadores


Las hojas tienen operandos
(Todo nodo tiene 2 hijos, i.e. operador sobre dos valores)

AdE1

Un AdE almacena una expresin (aritmtica)


*

+
A

AdE2

/
D

(D/E)

(A+B) (C-(D/E))

((A+B)*(C(D/E)))

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. rboles de expresin


Recorrido en orden previo (preorden)
A

26

rboles binarios. rboles de expresin

27

*
+

Construccin de un AdE

Recorrido en orden posterior (postorden)

El paso de una expresin infija a un AdE es natural

/
D

Salida: A B + C D E / - *
Forma posfijo/sufijo de la expresin

*
E

Imprimiendo parntesis al comienzo y al final de la llamada


a cada sub-rbol
Salida: ((A + B) * (C (D / E)))
Forma infija de la expresin

(A + B)

((A + B) * (C (D / E)))

(A + B) (C-(D / E))
*

Recorrido en orden medio (inorden)

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

(A+B)

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Salida: * + A B C / D E
Forma prefijo de la expresin

+
A

C
D

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

C (D / E)

rboles binarios. rboles de expresin

28

rboles binarios. rboles de expresin

29

Ejemplo 1: A B + C D E / - *
Construccin de un AdE

Pila

Smbolo

Basada en la evaluacin de expresiones mediante el TAD Pila


Consistente en la evaluacin de una expresin guardando en
una pila rboles generados para sub-expresiones

A, B
A

B
+

El algoritmo de evaluacin ms sencillo es el de


expresiones sufijo

B
+

C, D, E

Si se tiene una expresin prefijo o infijo, sta se pasa a sufijo


para evaluarla
- (A+B)*(C-D/E)  a sufijo  A B + C D E / - *  evaluacin

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. rboles de expresin

30

Ejemplo 1: A B + C D E / - *

rboles binarios. rboles de expresin

31

Ejemplo 2: (A + B C) * (D ^ (E / F))  A B + C D E F / ^ *

+
A

-, D, E, F, /

/
D

^
-

/
D

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

+
A

*
+

/
D

A, B, +, C

Pila

Smbolo

Pila

Smbolo

A
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

/
E

rboles binarios. rboles de expresin

32

Pila

typedef struct _NodoAB {


generic info;
struct _NodoAB *izq;
struct _NodoAB *der;
} NodoAB;

*
*

^
C D

+
A

33

Estructura de datos de un nodo de un rbol binario

Ejemplo 2: (A + B C) * (D ^ (E / F))  A B + C D E F / ^ *
Smbolo

rboles binarios. Implementacin en C

#define izq(pnodo) ((pnodo)->izq)


#define der(pnodo) ((pnodo)->der)
#define info(pnodo) ((pnodo)->info)

/
E

info

izq

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

der

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Implementacin en C

34

rboles binarios. Implementacin en C

35

Estructura de datos de un rbol binario


typedef NodoAB *ArbolBinario;
// Arbol es el puntero a nodo raz
// Se puede aplicar izq(pnodo) y der(pnodo) a un tipo rbol
// ArbolBinario* es NodoAB**
3
arbolBinario

3
1

Funciones de creacin y liberacin de un nodo de un


rbol binario
NodoAB *abCrearNodo();
// Crea un nuevo nodo e inicializa sus campos
status abLiberarNodo(NodoAB *pn);
// Libera la memoria de un nodo tras llamar a liberarInfo

5
5

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Implementacin en C

36

NodoAB *abCrearNodo() {
NodoAB *pn = NULL;
pn = malloc(sizeof(NodoAB));
if (!pn) return NULL;
izq(pn) = der(pn) = NULL;
return OK;
}

boolean abVacio(ArbolBinario *pa);


// Indica si un rbol est vaco
status abInicializar(ArbolBinario *pa);
// Inicializa un rbol
status abLiberar(ArbolBinario *pa);
// Libera la memoria de un rbol llamando a abLiberarNodo

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Implementacin en C

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

38

status abInicializar(ArbolBinario *pa) {


if (pa == NULL) return ERROR;
*pa = NULL;
return OK;
}

status abLiberar(ArbolBinario *pa);

37

Primitivas del TAD rbol binario

status abLiberarNodo(NodoAB *pn) {


if (!pn) return ERROR;
liberarInfo(info(pn));
free(pn);
pn = NULL;
return OK;
}

boolean abVacio(ArbolBinario *pa) {


if (*pa == NULL)
return TRUE;
else return FALSE;
}

rboles binarios. Implementacin en C

// Ojo: pa==NULL es ERROR

// Recorrido postorden

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Implementacin en C

39

status abLiberar(ArbolBinario *pa) { // Versin con macros


if (!pa) return ERROR;
if (!abVacio(&izq(*pa)) {
abLiberar(&izq(*pa));
}
if (!abVacio(&der(*pa)) {
abLiberar(&der(*pa));
}
// visitar es liberar el nodo
abLiberarNodo(*pa);
return OK;
}
status abLiberar(ArbolBinario *pa) { // Versin sin macros
if (!pa) return ERROR;
if (!abVacio(&((*pa)->izq)) {
abLiberar(&((*pa)->izq));
}
if (!abVacio(&((*pa)->der)) {
abLiberar(&((*pa)->der));
}
// visitar es liberar el nodo
abLiberarNodo(*pa);
return OK;
}
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Profundidad

40

Profundidad de un rbol
T
25

43

profundidad(T)= 1

profundidad(T)= 3
(la mayor profundidad de todas
las hojas)

43

32

1= 21 1

25

22= 4

3 = 22 1
7 = 23 1

6
2

 profundidad mnima necesaria para albergar n nodos:


p = prof(T) = log2(n + 1)) 1

29

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios. Profundidad

42

Contenidos

43

AB casi completo
Todos los niveles con profundidad d < p estn completos, i.e.
tienen 2d nodos

AB completo
Todos los niveles con profundidad d p estn completos, i.e.
tienen 2d nodos
(casi completo y tiene exactamente 2p hojas a profundidad p)
no completo
4
3

3
1

21 = 2

En total, un rbol de profundidad p completo puede albergar


(2p+11) nodos

43

12

6
2

1
25

20= 1

profundidad(T)= 0

T 25

41

Cada nivel de profundidad d de un AB puede albergar 2d nodos

profundidad(T)= -1

T 25

rboles binarios. Profundidad

casi
completo

completo

4
3

6
7

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles
rboles binarios
rboles binarios de bsqueda
rboles AVL

6
2

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios de bsqueda. Definicin

44

Un rbol Binario de Bsqueda (ABdB) es un rbol


binario T tal que sub-rbol T de T se cumple que

45

Recorrido en orden medio de un ABdB

info(izq(T)) < info(T) < info(der(T))

Salida => 1 2 3 4 5 6 7
Listado ordenado de los nodos!

dado un criterio de ordenacin de info(T)


3

6
2

1
7

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

46

Creacin de ABdB: insercin iterativa de valores en


ABdB parciales
Ejemplo
25 43 12 7 32 29
25
25

25

43

12
12

43
7

25

25
43

12
32

43

12
7

rboles binarios de bsqueda. Insercin

La funcin inserta(T, d) que introduce un dato d en un


rbol T realiza lo siguiente:
Si T est vaco, se crea un nodo con d y se inserta
Si no, se hace una llamada recursiva a insertar
- Si d < info(a), entonces se ejecuta insertar (izq(T))
- Si d > info(a), entonces se ejecuta insertar (der(T))
- Caso excepcional: si dato d = info(T), se devuelve ERROR o
se ignora devolviendo OK

32
29

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios de bsqueda. Creacin

43

5
4

Cada subrbol de un ABdB es a su vez un ABdB

25

6
2

rboles binarios de bsqueda. Orden medio

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

47

rboles binarios de bsqueda. Insercin

48

rboles binarios de bsqueda. Insercin

49

Cdigo C

Pseudocdigo
status abdbInsertar(ArbolBinario T, dato d)
si abVacio(T)
// Caso base
T = abCrearNodo()
si (T == NULL) devolver ERROR
info(T) = d
devolver OK
// Caso general
else
si info(T) < d
devolver abdbInsertar(izq(T), d)
else
devolver abdbInsertar(der(t), d)

status abdbInsertar(ArbolBinario *pa, generic *d) {


if (pa == NULL) return ERROR;
if (abVacio(pa)) { // Caso base (condicin de parada)
*pa = abCrearNodo();
if (*pa == NULL) return ERROR;
info(*pa) = *d;
return OK;
}
else {
// Caso general (llamada recursiva)
if (compararInfo(d, info(*pa)) < 0)
return abdbInsertar(&izq(*pa), d);
else
return abdbInsertar(&der(*pa), d);
}
}

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios de bsqueda. Creacin y bsqueda50


Dado un vector de valores representados en una lista, la
construccin de su correspondiente ABdB es como sigue:
status abdbCrear(ArbolBinario T, Lista L)
st = OK
mientras listaVacia(L) == FALSE && st == OK
listaExtraerInicio(L, d)
st = abdbInsertar(T, d)
si st == ERROR
abLiberar(T) // Ojo: la lista L no se ha recuperado
devolver st

Una vez creado el ABdB


Recorrer el rbol en orden medio recupera los datos ordenados
Buscar un dato en el rbol es muy eficiente
- Buscar en una lista desordenada es menos eficiente, pues
hay que recorrerla de forma secuencial
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios de bsqueda. Bsqueda


Bsqueda de un dato, e.g. 32
1: comparar(25, 32)?
25
2: comparar(43, 32)?
12
7

43
32 3: comparar(32, 32)!

29

Bsqueda de 33?
- Se hacen llamadas recursivas hasta llegar a un rbol vaco

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

51

rboles binarios de bsqueda. Bsqueda

52

rboles binarios de bsqueda. Complejidad bsqueda53

Pseudocdigo

Coste (nmero de accesos/comparaciones) de buscar un


dato en un ABdB

Para un ABdB (casi) completo con profundidad p:

Arbol abdbBuscar(ArbolBinario T, dato d)


si abVacio(T) == TRUE
devolver NULL
else si info(T) == d
devolver T
else si d < info(T)
devolver abdbBuscar(izq(T), d)
else
devolver abdbBuscar(der(T), d)

a lo sumo p accesos

Para un ABdB (casi) completo de n nodos:

a lo sumo tantos accesos como la profundidad del rbol log2(n + 1))1


Orden (log(n)) O(log(n))
Bsqueda secuencial en una lista
desordenada de n nodos,
a lo sumo n accesos: O(n)

Cuntas comparaciones en promedio se tienen que


hacer para encontrar un dato en un ABdB?

O(n)
O(log(n))

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rbolesbinariosdebsqueda. Complejidad ordenacin54

rboles binarios de bsqueda. Extraccin

Para n elementos, hay que realizar n inserciones


Dado rbol (casi) completo, cada insercin es a lo sumo del orden de la
profundidad actual del rbol log2(n + 1))1 orden (log(n)) O(log(n))
La creacin del rbol es O(nlog(n)), pues involucra n inserciones de orden
O(log(n))
Una vez creado el rbol, ste se puede usar para ordenar sus elementos
recorrindolo por orden medio O(n)  ordenacin es O(nlog(n)) + O(n)
O(nlog(n))
Ordenacin de una lista de n
nodos mediante algoritmos como
BubbleSort, InsertSort: O(n2)

Pseudocdigo
status abdbExtraer(ArbolBinario T, dato d)
si abVacio(T) == TRUE
devolver ERROR
T = abdbBuscar(T, d)
if T == NULL
devolver OK
else
devolver abdbReajustar(T)

O(n2)
O(n*log(n))
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

55

rboles binarios de bsqueda. Extraccin

56

rboles binarios de bsqueda. Extraccin

57

Reajuste de un (sub-)rbol T por la extraccin de su raz


1. La raz de T es hoja: reajustar puntero del padre de (la raz
de) T a NULL, eliminar T
2. La raz de T tiene 1 hijo
3. La raz de T tiene 2 hijos

Reajuste de un (sub-)rbol T por la extraccin de su raz


1. La raz de T es hoja
2. La raz de T tiene 1 hijo
3. La raz de T tiene 2 hijos

Ejemplo: abdbExtraer(T, 2)
T

5
4

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles binarios de bsqueda. Extraccin

58

rboles binarios de bsqueda. Extraccin

Reajuste de un (sub-)rbol T por la extraccin de su raz

1. La raz de T es hoja
2. La raz de T tiene 1 hijo
3. La raz de T tiene 2 hijos: buscar sucesor de T, guardar
info del sucesor en T, extraer sucesor

6
2

2
5
4
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

El sucesor de T se obtiene:
1. Bajando a la derecha de T un nivel
2. Bajando a continuacin a la izquierda
hasta el ltimo nivel (nodo hoja)

Ejemplo: abdbExtraer(T, 3)

Ejemplo: abdbExtraer(T, 1)
3

59

Reajuste de un (sub-)rbol T por la extraccin de su raz

1. La raz de T es hoja
2. La raz de T tiene 1 hijo: reajustar puntero del padre de T al
hijo de T, eliminar de T
3. La raz de T tiene 2 hijos

6
2

5
4

1
7

6
2

5
4

1
7

sucesor de T

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

6
2

rboles binarios de bsqueda. rboles no equilibrados60

rboles binarios de bsqueda. rboles no equilibrados61

Problema de ABdB: rboles no equilibrados


L = {1,2,3,4,5,6}
abdbCrear(T, L)

1
2
3

Cmo crear ABdB equilibrados?

Mediante el algoritmo AVL

5
6

El acceso ya no es O(log(n)), sino O(n), por lo que:


Coste de la bsqueda: O(nlog(n))  O(n)
Coste de la ordenacin: O(n)  O(n2)
Estructura de Datos y Algoritmos
Escuela Politcnica Superior
Universidad Autnoma de Madrid

Contenidos

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

62

rboles AVL. Definicin

63

Factor de equilibrio de un rbol binario T

fe(T)=profundidad(izq(T))profundidad(der(T))

rboles
rboles binarios
rboles binarios de bsqueda
rboles AVL

2
fe(1)=0

fe(2)=-2

fe(5)=1

fe(6)=0

fe(4)=1
fe(3)=0

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles AVL. Definicin

64

rboles AVL. Rotaciones

65

El algoritmo AVL establece rotaciones de 2 nodos A y B en


un rbol binario para tratar ciertos desequilibrios

rbol AVL (Adelson-Velskii y Landis)


Un rbol AVL es un ABdB* T en el que todo sub-rbol T cumple
que:

RI = rotacin izquierda
RD = rotacin derecha
RID = rotacin izquierda + rotacin derecha
RDI = rotacin derecha + rotacin izquierda
fe(A)

fe(T)=0, fe(T)=1 fe(T)=-1

fe(B)

Rotacin
-2

-2

Proposicin:
- Si T es un rbol AVL con N nodos, entonces:
profundidad(T) = O(log2N)

-2

-1

-2

A
B
2
1

RI(B)

-1

B
2

RD(B)

-1

B
A

B
-2 A

-2 A

B 1

A
B 1

RDI(izq(B))

* La definicin de AVL se puede aplicar a cualquier rbol binario, pero en la asignatura se


usar con rboles binarios de bsqueda

-1

-1

RID(der(B))

-1

66

rboles AVL. Construccin


0
1

Insercin de 2

-1
1

0
2

Insercin de 3

-2

-1
2

RI(2)
0

0
1

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

67

[1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8]


Insercin de 1

Tras realizar una insercin de ABdB, se comprueba la condicin


de AVL para realizar o no rotacin

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

Ejemplo: crear el rbol AVL para la lista

Construccin de un AVL

B
B

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles AVL. Construccin

A 2

A 2

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

rboles AVL. Construccin

68

rboles AVL. Construccin

Ejemplo: crear el rbol AVL para la lista

Ejemplo: crear el rbol AVL para la lista

[1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8]

[1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8]

-1

Insercin de 4

Insercin de 7

-1
1

69

-1

0
4

-2
2

RI(6)
-1
6

0
2

-1

Insercin de 15
-2

Insercin de 5

-1

-2
1

RI(4)

-1
4

0
4

0
3

-1
2

-1

0
15

-2

Insercin de 14

-2

Insercin de 6

-2

-1
1

-1

RI(4)
5

-1
2

0
0

-2
2

70

1
0

-1
4

14

-2

-2
2

13

-1
2

0
5

14

13

15

0
3

0
0
5

0
14

0
13

0
15

15

0
1

0 0
3

13

1
0

12

13

12

1
6

0 0
3

11

14

10

13

-1

1
4

12

0 0
3

15

0
1

-1
4

11

10

13

0
15

0
1

0
4

RD(10) 0

14

12

1
6

0 0
3

10

0
9

14

0 0
11

0 0
3

-1

12

0
11

13

0
1

1
4

15

14

-1

12

1
6

0 0
3

10

1
0

14

0 0
11

13

0
15

11

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

0
15

10

Insercin de 8

RD(12)

14

15

0
4

RD(12) 0

12
11

15

12

-1
2

0
0

0 0
3

14

12

Insercin de 11

0
14

0
15

71

2
4

13

15

-1

14

[1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8]

1
4

Insercin de 9

RI(7)
1

0
14

-2

0
0

-2

15
13

Insercin de 12

-1
14

rboles AVL. Construccin


Insercin de 10

0
7

Ejemplo: crear el rbol AVL para la lista

RDI(7)

-1
2

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

[1, 2, 3, 4, 5, 6, 7, 15, 14, 13, 12, 11, 10, 9, 8]

14

-2

Ejemplo: crear el rbol AVL para la lista


-2

15

rboles AVL. Construccin

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

-2

-2
2

0
1

RDI(14)
-2

Insercin de 13

-1

Estructura de Datos y Algoritmos


Escuela Politcnica Superior
Universidad Autnoma de Madrid

13

0
15

Estructuras de Datos y Algoritmos


Tema 4. rboles binarios

Ivn Cantador
David Vallet, Jos R. Dorronsoro
Escuela Politcnica Superior

Universidad Autnoma de Madrid

You might also like