Igor Santos Grueiro. Muchos objetos tienen CLAVE

Preview:

Citation preview

ÁRBOLES BINARIOS DE

BÚSQUEDA (BST)

Igor Santos Grueiro

Muchos objetos tienen

CLAVE

Cuando un objeto dispone de clave,

EL ACCESOnormalmente se realiza por ésta

¿Qué estructura de datos

CONOCEMOSque tenga acceso por una clave?

?

Ninguna

Para eso están los

ÁRBOLES

Un ÁRBOL BINARIO es una estructura de datos

formada por NODOS

2 enlacesClave menorClave mayor

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

izquierdo derecho

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

CLAVE

ELEMENTO

LA CLAVE TIENE QUE

SER COMPARABLE

public class Clave implements Comparable

recordemos

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

UNA INTERFAZ

1

UNA INTERFAZ es como una clase abstracta, pero

Sin atributos

2

Las clases que

implementen una interfaz tienen

que definir sus métodos

3

public class Clave implements Comparable

“Comparable” tiene el método

“Compareto”

public int compareTo(Object c){

}

“Compareto” puede devolver

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

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

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

Vamos a implementar la Clase estudiante

Un estudiante tiene:

Dni de tipo “int”

Nombre de tipo “string”

nota de tipo “double”

Un estudiante es

“Comparable” por su número de

dni

Un estudiante tiene implementado el método

“tostring”

5 minutos de trabajo personal

EStudiante

¿de qué tipo serán la

clave y el

elemento del nodo de un BST?

?

Nodo nodo

comparable

Object

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

nodoBst

Un BST tiene

un nodo raíz3

1

2

6

5

Raíz

public class BST{

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

Bst: Constructor

¿cúales son las

Operaciones que se pueden

hacer con un BST?

?

Inserción de un elemento

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

insertar 253

3

1

1

26

6

5

Bst: insertar

búsquedaDe elemento

UN

3

1

2

6

5

Elemento a Buscar 3

Devolvemos el objeto con clave 3

Bst: get

Eliminarun

Para eliminar un objeto con

cierta clave

Se busca elemento1EL

Se elimina El elemento2

Existen3 posibilidades

0No tiene hijos

3

1

2

6

5

Elemento a eliminar 3

Eliminamos el objeto con clave 3

1tiene un hijo

1

2

6

5

Elemento a eliminar 5

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

2tiene Los dos hijos

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

Bst: Borrar

Recorrer Un BST

Recorrido Pre-orden

3

1

2

6

5

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

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

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

Recorrido Pre-ORDER

Recorrido en Post-orden

3

1

2

6

5

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

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

}}

Recorrido POST-ORDER

RecorridoIN-orden

3

1

2

6

5

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

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

inOrder(ac.getDerecho()); }}

Recorrido IN-ORDER

Si los elementos

tienen clave

Y queremos tener acceso indexado

Podemos usar

árboles

Y, Así, ser muy

Rápid0s