Está en la página 1de 28

rboles

Carlos Delgado Kloos Ingeniera Telemtica Univ. Carlos III de Madrid


cdk@it.uc3m.es Java: rboles / 1

Cita
"The structure of concepts p is formally y called a

hierarchy and since ancient times has been a basic structure for all western knowledge. Kingdoms, empires, churches, armies have all been structured into hierarchies. Tables of contents of reference material are so structured, mechanical assemblies, , computer p software, , all scientific and technical knowledge is so structured..." -- Robert M. Pirsig: Zen and the Art of Motorcycle Maintenance
cdk@it.uc3m.es Java: rboles / 2

Definicin no recursiva
Un rbol consiste en un conjunto de nodos y un conjunto de aristas, de forma que:
Se distingue un nodo llamado raz A cada nodo h, excepto la raz, le llega una arista de otro nodo p (p padre de h, h uno de los hijos de p) Para cada nodo hay un camino (secuencia de aristas) nico desde la raz.
cdk@it.uc3m.es Java: rboles / 3

Ejemplo
Raz ( (sin p padre) ) El padre de h Un hijo de p

p h

hermano de h

Hojas Hojas (sin (sin hijos) hijos)


cdk@it.uc3m.es

Hojas Hojas (sin(sin hijos) hijos)


Java: rboles / 4

Ejemplo
Raz ( (sin p padre) ) El padre de h Un hijo de p

p h

hermano de h

Hojas Hojas (sin (sin hijos) hijos)


cdk@it.uc3m.es

Hojas (sin(sin hijos) hijos)


Java: rboles / 5

Definicin recursiva (1)


Un rbol es
Un nodo o un nodo y subrboles conectados con el nodo por medio de una arista a su raz

No incluye al rbol vaco


cdk@it.uc3m.es Java: rboles / 6

Definicin recursiva (2)


Un rbol es
vaco o un nodo y cero o ms subrboles no vacos conectados con el nodo por medio de una arista a su raz

cdk@it.uc3m.es

Java: rboles /

Ejemplos
Un sistema de ficheros La estructura de un documento (captulos, apartados, subapartados, ...) Un rbol de decisin Un rbol genealgico

cdk@it.uc3m.es

Java: rboles /

(()(()())())
()

() ()

() ()

()

cdk@it.uc3m.es

Java: rboles /

Terminologa
Un nodo es externo, si no tiene hijos j (es ( hoja) j ) Un nodo es interno, si tiene uno a ms hijos Un nodo es ascendiente de otro, si es padre de l o ascendiente de su padre. Un nodo es descendiente de otro, si este es ascendiente del primero Los descendientes de un nodo determinan un subrbol en el que ese nodo hace el papel de raz
cdk@it.uc3m.es Java: rboles / 10

Terminologa
Un rbol es ordenado, si para cada nodo existe un orden lineal para todos sus hijos. Un rbol binario es un rbol ordenado, en el que cada nodo tiene 0, 1 o 2 hijos ( l hijo (el h izquierdo d y el l derecho). d h )

cdk@it.uc3m.es

Java: rboles /

11

Terminologa
Un camino de un nodo a otro, es una secuencia de aristas consecutivas que llevan del primero al segundo. Su longitud es el nmero de aristas que tiene. La profundidad de un nodo es la longitud del camino de la raz a ese nodo. La altura de un rbol es la profundidad del nodo ms profundo.
cdk@it.uc3m.es Java: rboles / 12

Algoritmos bsicos
Tamao (nmero de nodos) Profundidad de un nodo Altura Recorridos
Euler Pre-, in- y post-orden

Suponemos rboles binarios para

simplificar
cdk@it.uc3m.es

Java: rboles /

13

Clase Nodo binario...


class NodoB { Object d; NodoB izq; NodoB der; NodoB() {this(null);} NodoB(Object o) {this(o,null,null);} NodoB(Object o, NodoB i, NodoB d) {d=o; izq=i; der=d;}
cdk@it.uc3m.es Java: rboles / 14

...Clase Nodo binario


static int size ( (NodoB a){...;} ){ } static int height (NodoB a){...;} void preorder (NodoB a){...;} void inorder (NodoB a){...;} void postorder (NodoB a){...;} }

cdk@it.uc3m.es

Java: rboles /

15

Clase rbol binario...


class ArbolB { protected NodoB raiz; ArbolB() {raiz=null;} ArbolB(Object o){raiz=new NodoB(o);} public int size() {return NodoB.size(raiz);} public int height() {return NodoB.height(raiz);}
cdk@it.uc3m.es Java: rboles / 16

...Clase rbol binario


p public void p preorder () {if (raiz!=null) raiz.preorder();} public void inorder () {if (raiz!=null) raiz.inorder();} public void postorder () {if (raiz!=null) raiz.postorder();} }

cdk@it.uc3m.es

Java: rboles /

17

Tamao
static int size ( (NodoB a){ ){ if (a==null) return 0; else return 1+size(a.izq)+size(a.der); }

cdk@it.uc3m.es

Java: rboles /

18

Altura
static int height g (NodoB a){ ( ){ if (a==null) return (-1); else return 1+Math.max(height(a.izq), height(a.der)); }

cdk@it.uc3m.es

Java: rboles /

19

Recorrido de Euler

cdk@it.uc3m.es

Java: rboles /

20

10

Recorrido preorden
1 2 4 5
cdk@it.uc3m.es

3 6 7
Java: rboles / 21

Recorrido postorden
7 1 3 2
cdk@it.uc3m.es

6 5 4
Java: rboles / 22

11

Recorrido inorden (simtrico)


2 1 3 4
cdk@it.uc3m.es

5 7 6
Java: rboles / 23

(A+B)*(CD)
* + A B C D

cdk@it.uc3m.es

Java: rboles /

24

12

Actividad

Visualizacin de expresiones como rboles http://www cs jhu edu/~goodrich http://www.cs.jhu.edu/~goodrich /dsa/05trees/Demo1/

cdk@it.uc3m.es

Java: rboles /

25

Ejemplo
Infijo A+B A+B C A+BC (A+B)*(CD)
cdk@it.uc3m.es

Prefijo +AB +ABC +ABC *+ABCD

Posfijo AB+ AB+C AB+C AB+CD*


Java: rboles / 26

13

Notacin postfijo
Calculadoras HP Pila para almacenar operandos Ej.: 3 5 + 6 2 *

2 5 4 6 32 8 3
cdk@it.uc3m.es Java: rboles / 27

preorden
void preorder (){ System.out.println(d); if (izq != null) izq.preorder(); if (der != null) der.preorder(); }
cdk@it.uc3m.es Java: rboles / 28

14

postorden
void postorder (){ if (izq != null) izq.postorder(); if (der != null) der postorder(); der.postorder(); System.out.println(d); }
cdk@it.uc3m.es Java: rboles / 29

inorden
void inorder (){ if (izq != null) izq.inorder(); System.out.println(d); if (der != null) der.inorder(); }
cdk@it.uc3m.es Java: rboles / 30

15

Propiedades de rboles binarios


Sea
E=Nmero de nodos externos I=Nmero de nodos internos N=Tamao=E+I H=Altura

Se cumple p
E=I+1 H+1E2H HI2H-1 log2(N+1)-1H(N-1)/2
cdk@it.uc3m.es

2*H+1N2H+1-1

Java: rboles /

31

Implementaciones
Basada en secuencia Basada en estructura enlazada

cdk@it.uc3m.es

Java: rboles /

32

16

Implementacin basada en secuencia


1 2 4 1 5 2 3 4 6 5 6 3
p(raiz)=1 p(x.izq)=2*p(x) p(x.der)=2*p(x)+1

7 7
Java: rboles / 33

cdk@it.uc3m.es

Implementacin basada en enlaces


1 2 4 5 6 3 7

cdk@it.uc3m.es

Java: rboles /

34

17

rboles binarios de bsqueda


Un rbol binario de bsqueda es un rbol binario en el que para cada nodo n,
todas las claves de los nodos del subrbol izquierdo son menores que la clave de n (o iguales) y todas las del subrbol derecho mayores (o iguales).

cdk@it.uc3m.es

Java: rboles /

35

Ejemplo
4 2 1 3
cdk@it.uc3m.es

8
2

3 5

6 7

9
3

Java: rboles /

36

18

Ejemplo
8
1

6 4 2 1
cdk@it.uc3m.es

9 7
2 3 4

5 3
Java: rboles /

37

Operaciones
Bsqueda Insercin Eliminacin

cdk@it.uc3m.es

Java: rboles /

38

19

Bsqueda
Buscamos el 3:
3<4: Subrbol izquierdo 3>2: Subrbol derecho 3=3: Elemento encontrado

4 2 8 3 5 6 7
Java: rboles / 39

1
http://www.cosc.canterbury.ac.nz/ mukundan/dsal/BST.html
cdk@it.uc3m.es

Insercin
7 Nos desplazamos dependiendo del resultado lt d d de l la comparacin, i cuando lleguemos a una hoja insertamos. 9
Si la clave del elemento a insertar coincide con la del nodo raz el elemento a insertar sustituye al que haba Si es menor buscamos en el subrbol izquierdo Si es mayor buscamos en el subrbol derecho Si llegamos a un nodo degenerado
Si es menor insertamos a la izquierda Si es mayor insertamos a la derecha
Java: rboles / 40

Ejemplo: insertar el 6
cdk@it.uc3m.es

20

Eliminacin
7 2 1 3 5 9 1 2 7

Elimino el 5 (1 hijo)
7

7 9 3 1 5 9

Es complicado ya que los nodos internos mantienen al rbol conectado. Para eliminar: Si se trata de una hoja se elimina directamente Si tiene un nico hijo se elimina el nodo haciendo que su nodo padre pase a referenciar a su nodo hijo Si tiene dos hijos :
Se sustituye el nodo por el menor elemento de su subrbol derecho Se elimina el nodo correspondiente a dicho menor elemento

2 1 3 5

Elimino el 2 (2 hijos)
cdk@it.uc3m.es Java: rboles / 41

Actividad
Ver animacin de rboles binarios de bsqueda
http://www.ibr.cs. tu-bs.de/courses/ ss98/audii/applets/ BST/BST-Example.html

cdk@it.uc3m.es

Java: rboles /

42

21

Montculos (Heaps)
Un montculo es un rbol binario en el que para cada nodo n (excepto para el raz), su clave es mayor o igual que la de su padre. Sirve para la implementacin de colas con prioridad d d

cdk@it.uc3m.es

Java: rboles /

43

Ejemplo
1 2 3 5 8
cdk@it.uc3m.es

4 6 7
Java: rboles / 44

22

Montculo completo
1 2 3 8
cdk@it.uc3m.es

4 5 6 9

7
Java: rboles / 45

Insertar
4 5 15 16 25 14 9 7 12 11 8
Java: rboles / 46

6 20

cdk@it.uc3m.es

23

Insertar
4 5 15 16 25 14 9 7 12 11 8 2
Java: rboles / 47

6 20

cdk@it.uc3m.es

Insertar
4 5 15 16 25 14 9 7 12 11 8 20
Java: rboles / 48

6 2

cdk@it.uc3m.es

24

Insertar
4 5 15 16 25 14 9 7 12 11 8 20
Java: rboles / 49

2 6

cdk@it.uc3m.es

Insertar
2 5 15 16 25 14 9 7 12 11 8 20
Java: rboles / 50

4 6

cdk@it.uc3m.es

25

Eliminar
4 5 15 16 25 14 9 7 12 11 8
Java: rboles / 51

6 20

cdk@it.uc3m.es

Eliminar
8 5 15 16 25 14 9 7 12 11
Java: rboles / 52

6 20

cdk@it.uc3m.es

26

Eliminar
5 8 15 16 25 14 9 7 12 11
Java: rboles / 53

6 20

cdk@it.uc3m.es

Actividad
Probar el formulario de
http://www.csse.monash.edu.au/~lloyd /tildeAlgDS/Priority-Q/

cdk@it.uc3m.es

Java: rboles /

54

27

Actividad
Probar el applet de
http://www.cosc.canterbury.ac.nz/ mukundan/dsal/MinHeapAppl.html

cdk@it.uc3m.es

Java: rboles /

55

28

También podría gustarte