igor santos grueiro. muchos objetos tienen clave

79
ÁRBOLES BINARIOS DE BÚSQUEDA (BST) Igor Santos Grueiro

Upload: isandro-abarca

Post on 12-Feb-2015

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Igor Santos Grueiro. Muchos objetos tienen CLAVE

ÁRBOLES BINARIOS DE

BÚSQUEDA (BST)

Igor Santos Grueiro

Page 2: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Muchos objetos tienen

CLAVE

Page 3: Igor Santos Grueiro. Muchos objetos tienen CLAVE
Page 4: Igor Santos Grueiro. Muchos objetos tienen CLAVE
Page 5: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Cuando un objeto dispone de clave,

EL ACCESOnormalmente se realiza por ésta

Page 6: Igor Santos Grueiro. Muchos objetos tienen CLAVE

¿Qué estructura de datos

CONOCEMOSque tenga acceso por una clave?

Page 7: Igor Santos Grueiro. Muchos objetos tienen CLAVE

?

Page 8: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Ninguna

Page 9: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Para eso están los

ÁRBOLES

Page 10: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Un ÁRBOL BINARIO es una estructura de datos

formada por NODOS

Page 11: Igor Santos Grueiro. Muchos objetos tienen CLAVE

2 enlacesClave menorClave mayor

Page 12: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Un nodo de un BST tiene un HIJO IZQUIERDO y un HIJO DERECHO

Page 13: Igor Santos Grueiro. Muchos objetos tienen CLAVE

izquierdo derecho

Page 14: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Un nodo tiene un ELEMENTO Y una CLAVE que permite el acceso

Page 15: Igor Santos Grueiro. Muchos objetos tienen CLAVE

CLAVE

ELEMENTO

Page 16: Igor Santos Grueiro. Muchos objetos tienen CLAVE

LA CLAVE TIENE QUE

SER COMPARABLE

Page 17: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public class Clave implements Comparable

Page 18: Igor Santos Grueiro. Muchos objetos tienen CLAVE

recordemos

Page 19: Igor Santos Grueiro. Muchos objetos tienen CLAVE

“Implements” se utiliza para decir que una clase tiene cierto comportamiento:

UNA INTERFAZ

1

Page 20: Igor Santos Grueiro. Muchos objetos tienen CLAVE

UNA INTERFAZ es como una clase abstracta, pero

Sin atributos

2

Page 21: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Las clases que

implementen una interfaz tienen

que definir sus métodos

3

Page 22: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public class Clave implements Comparable

Page 23: Igor Santos Grueiro. Muchos objetos tienen CLAVE

“Comparable” tiene el método

“Compareto”

Page 24: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public int compareTo(Object c){

}

Page 25: Igor Santos Grueiro. Muchos objetos tienen CLAVE

“Compareto” puede devolver

Page 26: Igor Santos Grueiro. Muchos objetos tienen CLAVE

>0 si “this” es mayor al objeto que se compara

Page 27: Igor Santos Grueiro. Muchos objetos tienen CLAVE

<0 si “this” es Menor al objeto que se compara

Page 28: Igor Santos Grueiro. Muchos objetos tienen CLAVE

0 si “this” es igual al objeto que se compara

Page 29: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Vamos a implementar la Clase estudiante

Page 30: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Un estudiante tiene:

Dni de tipo “int”

Nombre de tipo “string”

nota de tipo “double”

Page 31: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Un estudiante es

“Comparable” por su número de

dni

Page 32: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Un estudiante tiene implementado el método

“tostring”

Page 33: Igor Santos Grueiro. Muchos objetos tienen CLAVE

5 minutos de trabajo personal

Page 34: Igor Santos Grueiro. Muchos objetos tienen CLAVE

EStudiante

Page 35: Igor Santos Grueiro. Muchos objetos tienen CLAVE

¿de qué tipo serán la

clave y el

elemento del nodo de un BST?

Page 36: Igor Santos Grueiro. Muchos objetos tienen CLAVE

?

Page 37: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Nodo nodo

comparable

Object

Page 38: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public class NodoBST{ private Comparable clave; private Object elemento; private NodoBST izquierdo; private NodoBST derecho;// . . . . . . . }

Page 39: Igor Santos Grueiro. Muchos objetos tienen CLAVE

nodoBst

Page 40: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Un BST tiene

un nodo raíz3

1

2

6

5

Raíz

Page 41: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public class BST{

private NodoBST raiz; // . . . . . . . }

Page 42: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Bst: Constructor

Page 43: Igor Santos Grueiro. Muchos objetos tienen CLAVE

¿cúales son las

Operaciones que se pueden

hacer con un BST?

Page 44: Igor Santos Grueiro. Muchos objetos tienen CLAVE

?

Page 45: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Inserción de un elemento

Page 46: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Elementos a insertar: 2,5,3,1,6Elemento a

insertar 253

3

1

1

26

6

5

Page 47: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Bst: insertar

Page 48: Igor Santos Grueiro. Muchos objetos tienen CLAVE

búsquedaDe elemento

UN

Page 49: Igor Santos Grueiro. Muchos objetos tienen CLAVE

3

1

2

6

5

Elemento a Buscar 3

Devolvemos el objeto con clave 3

Page 50: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Bst: get

Page 51: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Eliminarun

Page 52: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Para eliminar un objeto con

cierta clave

Page 53: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Se busca elemento1EL

Page 54: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Se elimina El elemento2

Page 55: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Existen3 posibilidades

Page 56: Igor Santos Grueiro. Muchos objetos tienen CLAVE

0No tiene hijos

Page 57: Igor Santos Grueiro. Muchos objetos tienen CLAVE

3

1

2

6

5

Elemento a eliminar 3

Eliminamos el objeto con clave 3

Page 58: Igor Santos Grueiro. Muchos objetos tienen CLAVE

1tiene un hijo

Page 59: Igor Santos Grueiro. Muchos objetos tienen CLAVE

1

2

6

5

Elemento a eliminar 5

Eliminamos el objeto con clave 5 y el hijo ocupa su lugar

Page 60: Igor Santos Grueiro. Muchos objetos tienen CLAVE

2tiene Los dos hijos

Page 61: Igor Santos Grueiro. Muchos objetos tienen CLAVE

1

2

6

5

Elemento a eliminar 2

Eliminamos el objeto con clave 2

Se remplaza o por el mayor de su izquierda

O por el menor de su derecha

3

Page 62: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Bst: Borrar

Page 63: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Recorrer Un BST

Page 64: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Recorrido Pre-orden

Page 65: Igor Santos Grueiro. Muchos objetos tienen CLAVE

3

1

2

6

5

Page 66: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public void preOrden (NodoBST ac){ if (ac != null){ // Proceso: P.ej., escribir

System.out.println(ac.getElemento());

preOrden (ac.getIzquierdo()); preOrden (ac.getDerecho()); }}

Page 67: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Recorrido Pre-ORDER

Page 68: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Recorrido en Post-orden

Page 69: Igor Santos Grueiro. Muchos objetos tienen CLAVE

3

1

2

6

5

Page 70: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public void postOrden(NodoBST ac){ if (ac != null){ postOrden(ac.getIzquierdo()); postOrden(ac.getDerecho()); // Proceso: P.ej., escribir

System.out.println(ac.getElemento());

}}

Page 71: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Recorrido POST-ORDER

Page 72: Igor Santos Grueiro. Muchos objetos tienen CLAVE

RecorridoIN-orden

Page 73: Igor Santos Grueiro. Muchos objetos tienen CLAVE

3

1

2

6

5

Page 74: Igor Santos Grueiro. Muchos objetos tienen CLAVE

public void inOrder(NodoBST ac){ if (ac != null){ inOrder(ac.getIzquierdo());// Proceso: P.ej., escribir

System.out.println(ac.getElemento());

inOrder(ac.getDerecho()); }}

Page 75: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Recorrido IN-ORDER

Page 76: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Si los elementos

tienen clave

Page 77: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Y queremos tener acceso indexado

Page 78: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Podemos usar

árboles

Page 79: Igor Santos Grueiro. Muchos objetos tienen CLAVE

Y, Así, ser muy

Rápid0s