Árboles - it.uc3m.es2... · un árbol binario de búsqueda es un árbol binario en el que para...

34
1 [email protected] [email protected] Java: Árboles / 1 Árboles Carlos Delgado Kloos Mª Carmen Fernández Panadero Raquel M. Crespo García Ingeniería Telemática Univ. Carlos III de Madrid [email protected] Java: Árboles / 2 Índice Concepto Definición no recursiva Definición recursiva Ejemplos Terminología Conceptos básicos Propiedades Implementación Basada en secuencias Basada en estructuras enlazadas Operaciones básicas Recorridos Casos especiales Árboles de búsqueda binarios Montículos binarios

Upload: others

Post on 05-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

1

[email protected]@it.uc3m.es Java: Árboles / 1

Árboles

Carlos Delgado Kloos

Mª Carmen Fernández Panadero

Raquel M. Crespo García

Ingeniería Telemática

Univ. Carlos III de Madrid

[email protected] Java: Árboles / 2

Índice

ConceptoDefinición no recursiva

Definición recursiva

Ejemplos

TerminologíaConceptos básicos

Propiedades

ImplementaciónBasada en secuencias

Basada en estructuras enlazadasOperaciones básicas

Recorridos

Casos especialesÁrboles de búsqueda

binarios

Montículos binarios

Page 2: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

2

[email protected]@it.uc3m.es Java: Árboles / 3

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 andthe Art of Motorcycle Maintenance

[email protected] Árboles 4

Árboles

¿Qué son?. Características

Un árbol es una estructura de datos no linealque almacena los elementos jerárquicamente

Se puede definir de dos formas:

Definición no-recursiva

Definición recursivaa

e

i j

k

b

f g

T1 T2

Definición Recursiva

Page 3: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

3

[email protected]@it.uc3m.es Java: Árboles / 5

Definición no recursiva

Un árbol consiste en un conjunto de nodos y un conjunto de aristas, de forma que:Se distingue un nodo llamado raíz

A cada nodo h, excepto la raíz, 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 raíz.

[email protected] Java: Árboles / 6

Ejemplo

p

h

Raíz (sin padre)

Hojas

(sin

hijos)

Hojas

(sin

hijos)

Hojas

(sin hijos)

Hojas

(sin

hijos)

Hojas

(sin

hijos)

Hojas

(sin hijos)

El padre de h

Un hijo de phermano

de h

Page 4: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

4

[email protected] Java: Árboles / 7

Ejemplo

p

h

Raíz (sin padre)

Hojas

(sin

hijos)

Hojas

(sin

hijos)

Hojas

(sin hijos)

Hojas

(sin

hijos)

Hojas

(sin

hijos)

Hojas

(sin hijos)

El padre de h

Un hijo de phermano

de h

[email protected] Java: Árboles/ 8

a

b c d e

f g h i j

k

Árboles

Definición recursiva

Page 5: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

5

[email protected] Java: Árboles/ 9

a

b c d e

f g h i j

k

Árboles

Definición recursiva

[email protected] Java: Árboles/ 10

a

b c d

f g h i j

k

e

Árboles

Definición recursiva

Page 6: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

6

[email protected] Java: Árboles/ 11

a

b c d

f g h i j

k

e

Árboles

Definición recursiva

[email protected] Java: Árboles/ 12

a

b c d

f g h i j

k

e

Árboles

Definición recursiva

Page 7: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

7

[email protected] Java: Árboles / 13

Definición recursiva (1)

Un árbol es

Un nodo

o un nodo y subárboles conectados con el nodo por medio de una arista a su raíz

No incluye

al árbol vacío

[email protected] Java: Árboles / 14

Definición recursiva (2)

Un árbol es

vacío

o un nodo y cero o más subárboles no vacíos conectados con el nodo por medio de una arista a su raíz

Page 8: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

8

[email protected] Java: Árboles / 15

Ejemplos

Sistema de ficheros

Estructura de un libro o de un documento

Árbol de decisión

Expresiones aritméticas

[email protected] Java: Árboles/ 16

Ejemplo

Expresiones

( ) ( )

( )

( )

( )( )

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

Page 9: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

9

[email protected] Java: Árboles / 17

Terminología

Un nodo es externo, si no tiene hijos (es hoja)

Un nodo es interno, si tiene uno o más 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 subárbol en el que ese nodo hace el papel de raíz

[email protected] Java: Árboles / 18

Terminología

Un camino de un nodo a otro, es una secuencia de aristas consecutivas que llevan del primero al segundo. Su longitud es el número de aristas que tiene.

La profundidad de un nodo es la longitud del camino de la raíz a ese nodo.

La altura de un árbol es la profundidad del nodo más profundo.

El tamaño de un árbol es el número de nodos que contiene.

Page 10: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

10

[email protected] Java: Trees / 19

a

b c d e

f g h i j

kTamaño del árbol: 11

Altura del árbol: 3

Nodo Altura Profundidad Tamaño Interno /

Externo

a 3 0 11 Interno

b 1 1 3 Interno

c 0 1 1 Externo

d 1 1 2 Interno

e 2 1 4 Interno

f 0 2 1 Externo

g 0 2 1 Externo

h 0 2 1 Externo

i 0 2 1 Externo

j 1 2 2 Interno

k 0 3 1 Externo

Ejemplo

Terminología y propiedades

Terminología

Árbol ordenado

Un árbol es ordenado, si para cada nodo existe un orden lineal para todos sus hijos.

a

b c

[email protected] Java: Trees / 20

a

c b

Page 11: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

11

[email protected] Java: Árboles / 21

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

Terminología

Árbol binario

[email protected] Java: Árboles / 22

Algoritmos básicos

Tamaño (número de nodos)

Profundidad de un nodo

Altura

RecorridosEuler

Pre-, in- y post-orden

Suponemos árboles binarios para simplificar

Page 12: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

12

[email protected] Java: Árboles / 23

Implementaciones

Basada en estructura enlazada

Basada en secuencia

[email protected] Java: Árboles / 24

Implementación

basada en enlaces

1

32

7654

Page 13: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

13

[email protected] Java: Árboles / 25

Implementación

basada en secuencia

1

32

7654

1 2 3 4 5 6 7

p(raiz)=1

p(x.izq)=2*p(x)

p(x.der)=2*p(x)+1

26

public class BTree {

protected BNode root;

BTree() {

root = null;

}

BTree(Object info){

root = new Bnode(info);

}

Clase árbol binario…

[email protected] Java: Árboles/

Page 14: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

14

…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;

}

[email protected] Java: Árboles/

28

public void preorder() {

if (root!=null) root.preorder();

}

public void inorder() {

if (root!=null) root.inorder();

}

public void postorder() {

if (root!=null) root.postorder();

}

}

... Clase árbol binario

[email protected] Java: Árboles/

Page 15: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

15

[email protected] Java: Trees / 29

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;

}

30

int size (){...;}

int height (){...;}

void preorder (){...;}

void inorder (){...;}

void postorder (){...;}

}

... Clase nodo binario...

[email protected] Java: Árboles/

Page 16: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

16

31

Clase BNode: Size

int size (){

int size = 1;

if (left != null)

size += left.size();

if (right != null)

size += right.size();

return size;

}

[email protected] Java: Árboles/

[email protected] Java: Árboles/ 32

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);

}

Page 17: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

17

[email protected] Java: Árboles / 33

Recorrido de Euler

[email protected] Java: Árboles / 34

Recorrido preorden

1

32

64

75

Primero el nodo

Después sus hijos (recursivamente)

Page 18: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

18

[email protected] Java: Árboles / 35

Recorrido postorden

7

61

53

42

Primero sus hijos (recursivamente)

Después el nodo

[email protected] Java: Árboles / 36

Recorrido inorden

(simétrico)

2

51

73

64

Primero el hijo izquierdo (recursivamente)

Después el nodo

Primero el hijo derecho (recursivamente)

Page 19: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

19

[email protected] Java: Árboles / 37

(A+B)*(C–D)

*

–+

DCBA

[email protected] Java: Árboles / 38

Ejemplo

Infijo Prefijo Posfijo

A+B +AB AB+

A+B–C –+ABC AB+C–

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

Page 20: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

20

Actividad

Visualización de expresiones como árboles http://www.cs.jhu.edu/~goodrich

/dsa/05trees/Demo1/

[email protected] Java: Árboles / 39

[email protected] Java: Árboles / 40

Notación postfijo

Calculadoras HP

Pila para almacenar operandos

Ej.: 3 5 + 6 2 – *

3

5862432

Page 21: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

21

[email protected] Java: Árboles / 41

Clase BNode: preorder

void preorder (){

System.out.println(info);

if (left != null)

left.preorder();

if (right != null)

right.preorder();

}

42

Clase BNode: postorder

void postorder (){

if (left != null)

left.postorder();

if (right != null)

right.postorder();

System.out.println(info);

}

[email protected] Java: Árboles /

Page 22: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

22

43

Clase BNode: inorder

void inorder (){

if (left != null)

left.inorder();

System.out.println(info);

if (right != null)

right.inorder();

}

[email protected] Java: Árboles /

[email protected] Java: Árboles / 44

Propiedades de

árboles binarios

Sea

E=Número de nodos externos

I=Número de nodos internos

N=Tamaño=E+I

H=Altura

Se cumple

E=I+1

H+1≤E≤2H H≤I≤2H-1 2*H+1≤N≤2H+1-1

log2(N+1)-1≤H≤(N-1)/2

Page 23: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

23

[email protected] Java: Árboles / 45

Árboles binarios

de búsqueda

Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n,

todas las claves de los nodos delsubárbol izquierdo sonmenores que la clave de n (o iguales)

y todas las del subárbol derechomayores (o iguales).

[email protected] Java: Árboles / 46

Ejemplo

4

82

9631

75

1

2

3

3

Page 24: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

24

[email protected] Java: Árboles / 47

Ejemplo

4

8

2

96

31

7

5

4

3

2

1

[email protected] Java: Árboles / 48

Operaciones

Búsqueda

Inserción

Eliminación

Page 25: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

25

[email protected] Java: Árboles / 49

Búsqueda

Buscamos el “3”:• 3<4: Subárbol izquierdo• 3>2: Subárbol derecho• 3=3: Elemento encontrado

4

82

9631

75

4

2

3

http://www.cosc.canterbury.ac.nz/

mukundan/dsal/BST.html

[email protected] Java: Trees / 50

Inserción

Insertar “6”:• 6<7: Subárbol izquierdo• 6>2: Subárbol derecho•Hueco libre: insertar

7

92

51

3 6

7

2

5

Page 26: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

26

[email protected] Java: Trees / 51

Eliminación (1)

Eliminar “5”:• si es una hoja: eliminar• si es un nodo degenerado:

reemplazar por el hijo

7

92

51

3

3

[email protected] Java: Trees / 52

Eliminación (2)

Eliminar “2”:• si el nodo tiene 2 hijos: reemplazar por

• el mayor del subárbol izquierdo, o• el menor del subárbol derecho

7

92

51

3

3

Page 27: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

27

Actividad

Ver animación de árboles binarios de búsquedahttp://www.ibr.cs.tu-

bs.de/courses/ss98/audii/applets/BST/BST-

Example.html

[email protected] Java: Árboles / 53

[email protected] Java: Árboles / 54

Montículos (Heaps)

Un montículo binario es un árbol binario completo en el que cada nodo tiene una clave mayor(*) o igual que la de su padre.Normalmente, un montículo se refiere a

montículo binario* También podría definirse como menor o igual

(el orden es arbitrario)

Aplicaciones:Colas con prioridadOrdenación

Page 28: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

28

[email protected] Java: Árboles / 55

Montículos: propiedades

Un montículo cumple dos propiedades

Propiedad de montículo: para cada nodo n (excepto para el raíz), su clave es mayor o igual que la de su padre.

Completo

[email protected] Java: Árboles / 56

Ejemplo:

propiedad de montículo

1

42

9653

78

Pero no es completo

Page 29: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

29

[email protected] Java: Árboles / 57

Ejemplo:

Montículo completo

1

42

9653

78

[email protected] Java: Trees / 58

Implementación

basada en secuencias

1

32

7654

1 2 3 4 5 6 7

p(root)=1

p(x.left)=2*p(x)

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

Page 30: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

30

[email protected] Java: Árboles / 59

Insertar

4

65

207915

2516 1214 811

[email protected] Java: Árboles / 60

Insertar

4

65

207915

2516 1214 811 2

Page 31: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

31

[email protected] Java: Árboles / 61

Insertar

4

65

27915

2516 1214 811 20

[email protected] Java: Árboles / 62

Insertar

4

25

67915

2516 1214 811 20

Page 32: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

32

[email protected] Java: Árboles / 63

Insertar

2

45

67915

2516 1214 811 20

[email protected] Java: Árboles / 64

Eliminar

4

65

207915

2516 1214 811

Page 33: Árboles - it.uc3m.es2... · Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n, todas las claves de los nodos del subárbol izquierdo son menores que

33

[email protected] Java: Árboles / 65

Eliminar

8

65

207915

2516 1214 11

[email protected] Java: Árboles / 66

Eliminar

5

68

207915

2516 1214 11