Sunteți pe pagina 1din 34

rboles

Carlos Delgado Kloos M Carmen Fernndez Panadero Raquel M. Crespo Garca Ingeniera Telemtica Univ. Carlos III de Madrid
cdk@it.uc3m.es Java: rboles / 1

ndice
Concepto
Definicin no recursiva Definicin recursiva Ejemplos

Implementacin
Basada en secuencias Basada en estructuras enlazadas
Operaciones bsicas Recorridos

Terminologa
Conceptos bsicos Propiedades

Casos especiales
rboles de bsqueda binarios Montculos binarios
Java: rboles / 2

rcrespo@it.uc3m.es

Cita
"The structure of concepts is formally 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 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 / 3

rboles

Qu son?. Caractersticas

Un rbol es una estructura de datos no lineal que almacena los elementos jerrquicamente Se puede definir de dos formas:
Definicin no-recursiva Definicin recursiva
f T1 b g i a e j k T2

Definicin Recursiva
mcfp@it.uc3m.es rboles 4

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 / 5

Ejemplo
Raz (sin 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 / 6

Ejemplo
Raz (sin 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 / 7

rboles

Definicin recursiva

mcfp@it.uc3m.es

Java: rboles/

rboles

Definicin recursiva

mcfp@it.uc3m.es

Java: rboles/

rboles

Definicin recursiva

mcfp@it.uc3m.es

Java: rboles/

10

rboles

Definicin recursiva

mcfp@it.uc3m.es

Java: rboles/

11

rboles

Definicin recursiva

mcfp@it.uc3m.es

Java: rboles/

12

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 / 13

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 /

14

Ejemplos
Sistema de ficheros Estructura de un libro o de un documento rbol de decisin Expresiones aritmticas

cdk@it.uc3m.es

Java: rboles /

15

Ejemplo
Expresiones

()

() ()

() ()

()

(()(()())())
cdk@it.uc3m.es Java: rboles/ 16

Terminologa
Un nodo es externo, si no tiene hijos (es hoja) Un nodo es interno, si tiene uno o 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 / 17

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. El tamao de un rbol es el nmero de nodos que contiene.
cdk@it.uc3m.es Java: rboles / 18

Ejemplo
a b f g c

Terminologa y propiedades
Nodo Altura Profundidad Tamao Interno / Externo Interno Interno

d h i

e j k

a b

3 1

0 1

11 3

c
d e f g h i j k

0
1 2 0 0 0 0 1 0

1
1 1 2 2 2 2 2 3

1
2 4 1 1 1 1 2 1
Java: Trees /

Externo
Interno Interno Externo Externo Externo Externo Interno Externo

Tamao del rbol: 11 Altura del rbol: 3

mcfp@it.uc3m.es

19

Terminologa
rbol ordenado

a b c c

a
b

Un rbol es ordenado, si para cada nodo existe un orden lineal para todos sus hijos.
rcrespo@it.uc3m.es Java: Trees / 20

10

Terminologa
rbol binario

Un rbol binario es un rbol ordenado, en el que cada nodo tiene 0, 1 2 hijos (el hijo izquierdo y el derecho).

cdk@it.uc3m.es

Java: rboles /

21

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 /

22

11

Implementaciones
Basada en estructura enlazada Basada en secuencia

cdk@it.uc3m.es

Java: rboles /

23

Implementacin basada en enlaces

1 2 4 5 6 3 7

cdk@it.uc3m.es

Java: rboles /

24

12

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 / 25

cdk@it.uc3m.es

Clase rbol binario


public class BTree { protected BNode root; BTree() { root = null; } BTree(Object info){ root = new Bnode(info); }
rcrespo@it.uc3m.es Java: rboles/ 26

13

Clase rbol binario


public int size() { int size = 0; if (root != null) size=root.size(); return size; } public int height(){ int h = -1; if (root != null) h=root.height(); return h; }

rcrespo@it.uc3m.es

Java: rboles/

27

... Clase rbol binario


public void preorder() { if (root!=null) root.preorder(); } public void inorder() { if (root!=null) root.inorder(); } public void postorder() { if (root!=null) root.postorder(); } }
rcrespo@it.uc3m.es Java: rboles/ 28

14

Clase nodo binario...


class BNode { private Object info; private BNode left; private BNode right;
BNode() { this(null); } BNode(Object info) { this(info,null,null); } BNode(Object info, BNode l, BNode r) { this.info=info; left=l; right=r; }cdk@it.uc3m.es Java: Trees /

29

... Clase nodo binario...


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

rcrespo@it.uc3m.es

Java: rboles/

30

15

Clase BNode: Size


int size (){ int size = 1; if (left != null) size += left.size(); if (right != null) size += right.size(); return size; }
rcrespo@it.uc3m.es Java: rboles/ 31

Clase BNode: Height


int height() { int hl = -1; int hr = -1; if (left !=null) hl = left.height(); if (right !=null) hr = right.height(); return 1 + Math.max(hl, hr); }
rcrespo@it.uc3m.es Java: rboles/ 32

16

Recorrido de Euler

cdk@it.uc3m.es

Java: rboles /

33

Recorrido preorden
1 2 Primero el nodo Despus sus hijos (recursivamente)
cdk@it.uc3m.es

3 4 5 7
Java: rboles / 34

17

Recorrido postorden
7 1 Primero sus hijos (recursivamente) Despus el nodo
cdk@it.uc3m.es

6 3 2 4
Java: rboles / 35

Recorrido inorden (simtrico)


2

1
Primero el hijo izquierdo (recursivamente) Despus el nodo Primero el hijo derecho (recursivamente)
cdk@it.uc3m.es

5
3 7

6
Java: rboles / 36

18

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

cdk@it.uc3m.es

Java: rboles /

37

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

Prefijo
+AB +ABC *+ABCD

Posfijo
AB+ AB+C AB+CD*
Java: rboles / 38

19

Actividad

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

cdk@it.uc3m.es

Java: rboles /

39

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 / 40

20

Clase BNode: preorder


void preorder (){ System.out.println(info); if (left != null) left.preorder(); if (right != null) right.preorder(); }
rcrespo@it.uc3m.es Java: rboles / 41

Clase BNode: postorder


void postorder (){ if (left != null) left.postorder(); if (right != null) right.postorder(); System.out.println(info); }
rcrespo@it.uc3m.es Java: rboles / 42

21

Clase BNode: inorder


void inorder (){ if (left != null) left.inorder(); System.out.println(info); if (right != null) right.inorder(); }
rcrespo@it.uc3m.es Java: rboles / 43

Propiedades de rboles binarios


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

Se cumple
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 /

44

22

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 /

45

Ejemplo
4
1

2
1 3 6 5

8
2

9
3

3
cdk@it.uc3m.es

7
Java: rboles / 46

23

Ejemplo
8
1

4
2 5 3

3
4

1
cdk@it.uc3m.es

Java: rboles /

47

Operaciones
Bsqueda Insercin Eliminacin

cdk@it.uc3m.es

Java: rboles /

48

24

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

4 2 8

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

3
5

6 7

Java: rboles /

49

Insercin
Insertar 6:
6<7: Subrbol izquierdo 6>2: Subrbol derecho Hueco libre: insertar

7 2 9 5 3 6
Java: Trees / 50

cdk@it.uc3m.es

25

Eliminacin (1)
Eliminar 5:
si es una hoja: eliminar si es un nodo degenerado: reemplazar por el hijo

7 2 9 5 3 3

cdk@it.uc3m.es

Java: Trees /

51

Eliminacin (2)
Eliminar 2:
si el nodo tiene 2 hijos: reemplazar por el mayor del subrbol izquierdo, o el menor del subrbol derecho

7 9 5

2 3 1 3
cdk@it.uc3m.es

Java: Trees /

52

26

Actividad
Ver animacin de rboles binarios de bsqueda
http://www.ibr.cs.tubs.de/courses/ss98/audii/applets/BST/BSTExample.html

cdk@it.uc3m.es

Java: rboles /

53

Montculos (Heaps)
Un montculo binario es un rbol binario completo en el que cada nodo tiene una clave mayor(*) o igual que la de su padre.

Aplicaciones:

Normalmente, un montculo se refiere a montculo binario * Tambin podra definirse como menor o igual (el orden es arbitrario)

Colas con prioridad Ordenacin


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

27

Montculos: propiedades
Un montculo cumple dos propiedades
Propiedad de montculo: para cada nodo n (excepto para el raz), su clave es mayor o igual que la de su padre. Completo

cdk@it.uc3m.es

Java: rboles /

55

Ejemplo: propiedad de montculo


1

2
3 5 8 6

4
9 7
Java: rboles / 56

Pero no es completo
cdk@it.uc3m.es

28

Ejemplo: Montculo completo


1 2 3 8
cdk@it.uc3m.es

4 5 6 9

7
Java: rboles / 57

Implementacin basada en secuencias


1
p(root)=1 p(x.left)=2*p(x) p(x.right)=2*p(x)+1

2
4 1 5 2 3 4 6 5

7 6 7
Java: Trees / 58

cdk@it.uc3m.es

29

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

6 20

cdk@it.uc3m.es

Insertar
4

5
15 16 25 14

6 9 7
12 11 8 2
Java: rboles / 60

20

cdk@it.uc3m.es

30

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

6 2

cdk@it.uc3m.es

Insertar
4

5
15 16 25 14

2 9 7
12 11 8 20
Java: rboles / 62

cdk@it.uc3m.es

31

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

4 6

cdk@it.uc3m.es

Eliminar
4

5
15 16 25 14

6 9 7
12 11 8
Java: rboles / 64

20

cdk@it.uc3m.es

32

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

6 20

cdk@it.uc3m.es

Eliminar
5

8
15 16 25 14

6 9 7
12 11
Java: rboles / 66

20

cdk@it.uc3m.es

33

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

cdk@it.uc3m.es

Java: rboles /

67

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

cdk@it.uc3m.es

Java: rboles /

68

34

S-ar putea să vă placă și