You are on page 1of 57

ARBOLES

PARTE 1
CLASE N12
Leissi M. Castaeda Len
lcl@upnorte.edu.pe
lcl@comunidad.upn.edu.pe
https://sites.google.com/site/leissicl/

Que veremos hoy?


Arboles


1.
2.
3.
4.
5.
6.

Arboles Binarios
Arboles Binarios de Bsqueda
Arboles AVL
Arboles B
Arboles B+
Arboles Roji-Negro

rboles

Introduccin


Se han estudiado estructuras de datos lineales, tanto


estticas como dinmicas: a cada elemento siempre le
sucede o le precede como mximo otro elemento.
Ahora se va a introducir el concepto de ramificacin
entre nodos para estudiar la estructura de datos rboles.
Los rboles son las estructuras de datos no lineales
(cada elemento puede tener ms de un sucesor) y
dinmicas (cambiar de forma o tamao durante la
ejecucin) de datos ms importantes.

Introduccin


Los rboles balanceados o AVL son la estructura de


datos ms eficiente para trabajar con la memoria
principal (o interna), mientras que los rboles B y B+ con
la memoria secundaria (externa).

rboles


Un rbol se puede definir como una estructura


jerrquica aplicada sobre una coleccin de elementos u
objetos llamados nodos, uno de los cuales se denomina
raiz.

Formalmente se define un rbol de tipo T como una


estructura homognea resultado de la concatenacin de
un elemento de tipo T con un nmero finito de rboles
disjuntos, llamados subrboles.
Una forma particular de rbol es el rbol vaco.

rboles


Estructuras recursivas, ya que cada subrbol es a su


vez un rbol.
Un rbol se puede representar de diferentes formas
(notaciones) y todas ellas se consideran equivalentes:






Diagramas de Venn
Anidacin de parntesis
Notacin decimal de Dewey
Notacin Indentada
Grafo (se distinguen nodos y arcos)

Ejemplo

b) (A(B(D(I),E,F,(J,K)),C(G,H(L))))

c) 1.A, 1.1.B,
1.1.1.D, 1.1.1.1.I,
1.1.2.E, 1.1.3.F,
1.1.3.1.J,
1.1.3.2.K, 1.2.C,
1.2.1.G, 1.2.2.H,
1.2.2.1.L

Caractersticas y Propiedades de los


rboles


Todo rbol que no es vaco tiene un


nico nodo raz
Un nodo X es descendiente directo de
un nodo Y, si el nodo X es apuntado
por el nodo Y. En este caso decimos: X
es hijo de Y.
Un nodo X es antecesor directo de un
nodo Y, si el nodo X apunta al nodo Y.
En este caso decimos: X es padre de
Y.
Todos los nodos que son
descendientes directos hijos de un
mismo nodo padre son hermanos.

B
D

F
J

11

Caractersticas y Propiedades de los


rboles (cont.)


Todo nodo que no tiene ramificaciones


hijos-, se conoce como terminal u hoja.
Todo nodo que no es raz ni hoja, se
conoce como interior.
Grado es el nmero de descendientes
directos de un determinado nodo.
Grado del rbol es el mximo grado de D
todos los nodos del rbol.
Nivel es el nmero de arcos que deben I
ser recorridos para llegar a un
determinado nodo. Raz nivel 1.
Altura es el mximo nmero de niveles
de todos los nodos del rbol.

F
J

12

Longitud de camino interno y externo




Se define la longitud de camino del nodo X como el


nmero de arcos que se deben recorrer para llegar
desde la raz hasta el nodo X.

Por definicin la raz tiene longitud de camino 1, sus


descendientes directos longitud de camino 2 y as
sucesivamente.

13

Longitud de Camino Interno (LCI)




La LCI del rbol es la suma de las longitudes de camino


de todos los nodos del rbol.
Esta medida es importante porque permite conocer los
caminos que tiene el rbol.
Se calcula por medio de la siguiente frmula:

LCI =

n
i =1

*i

Donde i representa el nivel de rbol, h su altura y n i el


nmero de nodos en el nivel i.
La media de la longitud de camino interno: LCIM=LCI/n
14

Ejemplo
h

LCI = ni * i

B
D

i =1

LCI = 1*1 + 2*2 + 5*3 + 4*4


= 36

Longitud de camino externo (LCE)




Para definir la longitud de camino externo de un rbol es


necesario primero explicar los conceptos de rbol
extendido y nodo especial.

rbol extendido: aquel en el que el nmero de hijos de


cada nodo es igual al grado del rbol. Si algn nodo no
cumple con esta condicin, entonces deben
incorporarse los nodos especiales requeridos.

Nodos especiales: tienen como objetivo reemplazar las


ramas vacas o nulas, no puede tener descendientes. Se
representa en forma de cuadrado.
16

Longitud de camino externo (LCE)




Podemos definir entonces la LCE de un rbol como la


suma de las longitudes de camino de todos los nodos
especiales del rbol. Se calcula por medio de la
siguiente frmula:
h +1

LCE =

n
i=2

ei

*i

Donde i representa el nivel del rbol, h su altura y nei el


nmero de nodos especiales en el nivel i. Observe que i
comienza desde 2, puesto que la raz se encuentra en el
nivel i y no puede ser nodo especial.
La media: LCEM=LCE/ne
17

Ejemplo
A

h +1

LCE = nei * i

i=2

LCE = 1*2 + 1*3 + 11*4 + 12*5 = 109

Ejercicio


Hallar el camino interno, media del camino interno y el


camino externo de:

rboles Binarios

20

rboles Binarios


Un rbol ordenado es aquel en el cual la distribucin de


las ramas sigue un cierto orden.

Los rboles ordenados de grado 2 son conocidos como:


rboles binarios.

En un rbol binario cada nodo puede tener como


mximo dos subrboles y stos se distinguen entre s
como subrbol izquierdo y subrbol derecho, segn su
ubicacin con respecto a la raz.

21

rboles Binarios: aplicaciones




Las aplicaciones de los arboles binarios son muy


variadas ya que se les puede utilizar para representar
una estructura en la cual es posible tomar decisiones
con dos opciones en distintos puntos.

Ejemplo:


rboles Binarios de Bsqueda


27
14

47

7
59

32
11

50
77
22

 Representacin de una expresin algebraica.

+
*

^
3.5

23

 rbol Genealgico.
Osvaldo Cario
Battistuti

Jose Cario
Scandallo

Antonio Cario
Godoy

Maria Scandallo
Miscoria

Maria Battistuti
Valiente

Roberto Battistuti
Mazzotti

Maria Valiente
Martin

24

rboles binarios distintos, similares y


equivalentes


Distintos: cuando sus estructuras, la distribucin de


nodos y arcos son diferentes.
A

A)

B)
B

C
D

B
C

rboles binarios distintos, similares y


equivalentes


Similares: cuando sus estructuras son idnticas pero la


informacin que contienen sus nodos difiere entre s
A

A)

F
A

B)
C
B

R
D

rboles binarios distintos, similares y


equivalentes


Equivalentes: aquellos que son similares y adems la


informacin de sus nodos contienen la misma
informacin
A
A
A)
B
B
A

B)

A
C
C

B
D
D

Qu relacin encuentra en los siguientes


rboles binarios?
A

A)

B)

N
D

C)

D)

A
C

B
D

A)

B)

N
D
A

C)

D)

A
C

B
D

El rbol de la figura C es distinto de los rboles de la figura A,B

Los rboles de la figura A, B y D son similares.

Los rboles de la figura A y D son equivalentes.

rboles binarios completos




Se define un rbol binario completo como un rbol en el


que todos sus nodos, excepto los del ltimo nivel, tienen
dos hijos; el subrbol izquierdo y el subrbol derecho.
Ejemplo:
A
A) DE ALTURA 3:

A
B

B) DE ALTURA 4:

G
M

Se puede calcular el nmero de nodos de un rbol binario


completo de altura h aplicando la siguiente frmula:
NMERO DE NODOSABC = (2^h) - 1
Donde ABC significa rbol binario completo, y h la altura del rbol.
As, por ejemplo, un rbol binario completo de altura 5 tendr 31
nodos, de altura 9 tendr 511 nodos y un rbol de 17 tendr 131071
nodos.

Cabe aclarar que existen algunos autores que definen un rbol


binario completo de otra forma; y otros que utilizan el trmino lleno
para referirse a completos.

Representacin de rbol general a binario


1.

Deben enlazarse los hijos de cada nodo en forma


horizontal

2.

Debe enlazarse en forma vertical el nodo padre con el


hijo que se encuentra ms a la izquierda, adems debe
eliminarse el vnculo de ese padre con el resto de sus
hijos

3.

Debe rotarse el diagrama resultante aproximadamente


45 grados hacia la izquierda.

B
D

H
A

L
B

A
D
B
D
I

C
E

F
J

G
K

C
E

H
L

H
L

Representacin de rboles binarios en


memoria


Hay dos formas tradicionales de representarlos:




Por medio de datos tipo punteros tambin conocidos como


variables dinmicas o listas.
Por medio de arreglos.

Sin embargo la ms utilizada es la primera, puesto que


es la ms natural para tratar este tipo de estructuras.
Los nodos del rbol binario sern representados como
registros que contendrn como mnimo 3 campos: uno
almacenar la informacin del nodo y los dos restantes
se utilizarn apuntarn al subarbol izquierdo y derecho
del subarbol en cuestin.
34

rboles binarios


Cada nodo se representa grficamente de la siguiente


manera:
T=

Izq

Info

Der

La definicin de un rbol binario en lenguaje algortmico


es:
Enlace=^nodo
Nodo=registro
izq: tipo enlace
info: tipo de dato
der: tipo enlace
{fin de la definicion}
35

+
*
A

^
B

3.5

/
C

NIL

NIL

3.5

NIL

NIL

NIL
D

NIL

NIL NIL

NIL

NIL

Operaciones en rboles binarios




Una de las operaciones bsicas es la creacin del


mismo en memoria.
Otras operaciones:





Recorrer todos los nodos


Insertar un nuevo nodo
Eliminar alguno de los existentes
Buscar un valor determinado

A continuacin se presentar el algoritmo de creacin de


un rbol

37

Crea_arbol(NODO)
1.
Leer informacion(Hacer NODO^.INFO
INFOR)
2.
Escribir existe nodo por izquierda?: 1(Si) 0(No)
3.
Leer respuesta (RESP)
4.
Si RESP es afirmativa entonces
CREA (OTRO)
{crear un nuevo nodo}
Hacer NODO ^.IZQ
OTRO
Regresar a Crea_arbol con NODO ^.IZQ
{llamada recursiva}
si no
Hacer NODO ^.IZQ NIL
6.
{fin condicional del paso 4}
7.
Escribir existe nodo derecha? : 1(Si) 0(No)
8.
Leer respuesta (RESP)
9.
Si respuesta es afirmativa entonces
CREA (OTRO)
{crear un nuevo nodo}
Hacer NODO ^.DER
OTRO
Regresar a Crea_arbol con NODO ^.DER
{llamada recursiva}
si no
Hacer NODO ^.DER NIL
10.
{fin condicional del paso 9}

Recorrido de un rbol binario




Una de las operaciones ms importantes, que lo que


hace es visitar los nodos del rbol en forma ordenada,
de tal forma que todos los nodos sean visitados una sola
vez.
Hay tres manera de recorrer un rbol : en inorden,
preorden y postorden:


INORDEN
 Recorrer el subarbol izquierdo en inorden.
 Examinar la raz.
 Recorrer el subarbol derecho en inorden.

39

Recorrido de un rbol binario




PREORDEN
 Examinar la raz.
 Recorrer el subarbol izquierdo en preorden.
 recorrer el subarbol derecho en preorden.

POSTORDEN
 Recorrer el subarbol izquierdo en postorden.
 Recorrer el subarbol derecho en postorden.


Examinar la raz.

40

Ejemplo de recorrido
A
B
D

C
E

PREORDEN:

ABDECFG

INORDEN:

DBEAFCG

POSORDEN:

DEBFGCA

G
+
^

*
A
PREORDEN:

+*AB^/CD3.5

INORDEN:

A*B+C/D^3.5

POSORDEN:

AB*CD/3.5^+

B
C

3.5

/
D

41

Ejemplo de recorrido
A
B

D
G

E
H

F
I

K
PREORDEN:

ABDGKCEHIFJ

INORDEN:

GKDBAHEICFJ

POSORDEN:

KGDBHIEJFCA

Recorrido Preorden
PREORDEN(NODO).
1.
Si NODO NIL entonces
visitar el NODO {escribir NODO^.INFO}
regresar a PREORDEN con NODO^.IZQ
{llamada recursiva a PREORDEN con la
rama izquierda del nodo}
regresar a PREORDEN con NODO^.DER
{llamada recursiva a PREORDEN con la
rama derecha del nodo}
2.
{Fin condicional del paso 1}

Recorrido Inorden
INORDEN(NODO).
1.
Si NODO NIL entonces

2.

regresar a INORDEN con NODO^.IZQ


{llamada recursiva a INORDEN con la rama
izquierda del nodo}
visitar el NODO {escribir NODO^.INFO}
regresar a INORDEN con NODO^.DER
{llamada recursiva a INORDEN con la rama
derecha del nodo}
{Fin condicional del paso 1}

Recorrido Postorden
POSTORDEN(NODO).
1.
Si NODO NIL entonces
regresar a POSTORDEN con NODO^.IZQ
{llamada recursiva a POSTORDEN con la rama
izquierda del nodo}
regresar a POSTORDEN con NODO^.DER
{llamada recursiva a POSTORDEN con la rama
derecha del nodo}
visitar el NODO {escribir NODO^.INFO}
2.
{Fin condicional del paso 1}

rboles Binarios de
Bsqueda

46

rbol binario de bsqueda




Este tipo de rbol permite almacenar informacin


ordenada.

Reglas a cumplir:



Cada nodo del rbol puede tener 0, 1 2 hijos.


Los descendientes izquierdos deben tener un valor menor al
padre.
Los descendientes derechos deben tener un valor mayor al
padre.

47

Ejemplos de ABB
21

30
33

13

18

25

36

32
40

15

33

21

41
43

Por qu no son ABB?


21

5
33

13

17

18
15

25

1
22

2
40

Por qu no son ABB?


21

5
33

13

17

18
15

25

1
22

2
40

Implementacin de un ABB
struct nodo
{
int llave;
struct nodo *izq;
struct nodo *der;
};
typedef struct nodo *ABBTree;

51

Insertar en un ABB
void insertar(ABBTree &arbol, int dato)
{
if (arbol==NULL)
{
arbol=(ABBTree)malloc(sizeof(struct nodo));
arbol->izq=NULL;
arbol->der=NULL;
arbol->llave=dato;
}
else
{
if (dato>arbol->llave)
{
insertar(arbol->der,dato);
}
else
{
insertar(arbol->izq,dato);

52

else
{
insertar(arbol->izq,dato);
}
}
}


Reportar

void reportar(ABBTree abb, int h)


{
if(abb!=NULL)
{
printf("%i h=%i \n",abb->llave, h);
reportar(abb->izq,h+1);
reportar(abb->der,h+1);
}
}
53

Recorridos
void recorrerEnOrden(ABBTree abb)
{
if(abb!=NULL)
{
recorrerEnOrden(abb->izq);
printf("%i \n",abb->llave);
recorrerEnOrden(abb->der);
}
}

54

Recorridos
void recorrerPreOrden(ABBTree abb)
{
if(abb!=NULL)
{
printf("%i \n",abb->llave);
recorrerEnOrden(abb->izq);
recorrerEnOrden(abb->der);
}
}

55

Recorridos
void recorrerPostOrden(ABBTree abb)
{
if(abb!=NULL)
{
recorrerEnOrden(abb->izq);
recorrerEnOrden(abb->der);
printf("%i \n",abb->llave);
}
}

56

Buscar
int buscar(ABBTree abb, int dato)
{
int resp=0;
if (abb==NULL)
{
resp=0;
}
else
{
if(abb->llave==dato)
{
resp=1;
}

else if (abb->llave<dato)
{
resp=buscar(abb->der,dato);
}
else
{
resp=buscar(abb->izq,dato);
}
}
return resp;
}

57

You might also like