Вы находитесь на странице: 1из 46

rboles

L.I. Ma. Luisa Velasco Ramrez.

Intuitivamente el concepto de rbol implica una estructura en la que lo datos se organizan de modo que los elementos de informacin estn organizados entre s a travs de ramas.

Luis (bisabuelo) Micaela (hermana) Lucas (abuelo) Mara (hermana)

Luis (padre)

Juana Mara (hija)

Victoria (hija)

Graciela (hija)

Luis (hijo)

Un rbol consta de un conjunto finito de elementos, denominados nodos, y un conjunto finito de lneas dirigidas, denominadas ramas, que conectan los nodos. El nmero de ramas asociado con un nodo es el grado del nodo.

Si el rbol no esta vaco, entonces el primer nodo se llama raz.


Nivel 0 A raz

Nivel 1

Nivel 2

Altura: 3

El nivel de un nodo es su distancia a la raz. La altura o profundidad de un rbol es el nivel de la hoja del camino ms largo desde la raz ms uno.

Definiciones Bsicas
Nodo Padre de un nodo N es aquel que apunta al mismo. En un rbol cada nodo slo puede tener un padre. En el siguiente ejemplo , A es el padre de B y C, y a su vez, B es el padre de D. Nodo Hijo de otro nodo A es cualquier nodo apuntado por el nodo A. Un nodo puede tener varios hijos. En el ejemplo , B y C son los nodos hijos de A y todos los nodos tienen uno o dos hijos.

Nodo Raz es el nico del rbol que no tiene padre. En la representacin que se utiliza, el nodo raz es el que se encuentra en la parte superior del rbol: A

Hojas son todos los nodos que no tienen hijos. En la representacin del ejemplo son hojas los nodos situados en la parte inferior: D, G, H y F. Nodos Interiores son los nodos que no son ni el nodo raz, ni nodos hoja. En el ejemplo, son nodos interiores B, C y E. Camino es una secuencia de nodos, en el que dos nodos consecutivos cualesquiera son padre e hijo. En el ejemplo A-B-D es un camino, al igual que E-G y C-E-H. Rama es un camino desde el nodo raz a una hoja. En el ejemplo , A-C-E-G y AC-F son ramas.

Grado es el nmero mximo de hijos que tienen los nodos del rbol. As, en el ejemplo anterior el rbol es de grado dos. Se de ver que una lista no es ms que un rbol de grado uno.

rboles binarios. Recorrido


Definicin 1 Un rbol binario es un rbol de grado 2. Definicin 2 Un rbol binario es aquel que a) es vaco, b) est formado por un nodo cuyos subrboles izquierdo y derecho son a su vez rboles binarios.

El rbol del ejemplo anterior es un rbol binario, ya que cada nodo tiene como mximo dos hijos. Se debe notar que en cualquier rbol, no slo en los binarios, si se elimina el nodo raz, se obtienen dos rboles. Aquel que colgaba del enlace izquierdo del nodo raz se denomina subrbol izquierdo y aquel que colgaba del enlace derecho se denomina subrbol derecho.

Existen algunos tipos especiales de rboles binarios en funcin de ciertas propiedades.Por ejemplo: rbol binario equilibrado es aquel en el que en todos sus nodos se cumple la siguiente propiedad:
| altura(subrbol_izquierdo) - altura(subrbol_derecho) | menor o igual a 1.

rbol binario completo es aquel en el que todos los nodos tienen dos hijos y todas las hojas estn en el mismo nivel. Se denomina completo porque cada nodo, excepto las hojas, tiene el mximo de hijos que puede tener.

En estos rboles se cumple que en el nivel k hay 2k nodos y que, en total, si la altura es h, entonces hay 2h - 1 nodos.

En el nivel 0 tenemos 20 = 1 nodos, en el nivel 1 tenemos 21 = 2 nodos y en el nivel 2 tenemos 22=4 nodos.
En total el rbol es de altura 3 y por tanto contiene 23-1 = 7 nodos.

Implementaciones del rbol binario Al igual que ocurre en el caso de las listas, se puede implementar un rbol binario mediante estructuras estticas o mediante estructuras dinmicas. En ambos casos, cada nodo del rbol contendr tres valores:

La informacin de un tipobase dado contenida en el nodo. Un enlace al hijo derecho (raz del subrbol derecho) Un enlace al hijo izquierdo (raz del subrbol izquierdo)

Grficamente:

Representacin de un rbol binario en Java


class NodoArbol{ int Dato; NodoArbol izq; NodoArbol der; public NodoArbol (int dato){ this.dato=dato; izq=der=null; }

}I

Class Arbol { private NodoArbol raz; public void find (int key){} public void insert (int dato){} public void delete (ind dato){} } //Fin clase Arbol

Recorrido de un rbol binario Recorrer un rbol consiste en acceder una sola vez a todos sus nodos. Esta operacin es bsica en el tratamiento de rboles y permite, por ejemplo, imprimir toda la informacin almacenada en el rbol, o bien eliminar toda esta informacin o, si tenemos un rbol con tipo base numrico, sumar todos los valores... En el caso de los rboles binarios, el recorrido de sus distintos nodos se debe realizar en tres pasos: acceder a la informacin de un nodo dado, acceder a la informacin del subrbol izquierdo de dicho nodo, acceder a la informacin del subrbol derecho de dicho nodo.

Imponiendo la restriccin de que el subrbol izquierdo se recorre siempre antes que el derecho, esta forma de proceder da lugar a tres tipos de recorrido, que se diferencian por el orden en el que se realizan estos tres pasos.

Preorden: primero se accede a la informacin del nodo, despus al subrbol izquierdo y despus al derecho.

Inorden: primero se accede a la informacin del subrbol izquierdo, despus se accede a la informacin del nodo y, por ltimo, se accede a la informacin del subrbol derecho.

Postorden: primero se accede a la informacin del subrbol izquierdo, despus a la del subrbol derecho y, por ltimo, se accede a la informacin del nodo.

Preorden: A, B, D, E, C, F, G Inorden: D, B, E, A, F, C, G Postorden: D, E, B, F, G, C, A

rboles binarios de bsqueda


Definicin Un rbol binario de bsqueda es una estructura de datos de tipo rbol binario en el que para todos sus nodos, el hijo izquierdo, si existe, contiene un valor menor que el nodo padre y el hijo derecho, si existe, contiene un valor mayor que el del nodo padre.

Es de bsqueda porqu:
Los nodos estn ordenados de manera conveniente para la bsqueda.

Todas las datos del subrbol izquierdo son menores que el dato del nodo raz, y todas los datos del subrbol derecho son mayores.

Bsqueda
La operacin de bsqueda en un rbol binario de bsqueda es bastante sencilla de entender. Suponer que se busca un elemento x en el rbol. Lo primero que haremos ser comprobar si se encuentra en el nodo raz. Si no es as, si el elemento buscado es menor que el contenido en el nodo raz sabremos que, de estar en el rbol, se encuentra en el subrbol izquierdo. Si el elemento buscado es mayor que el contenido en el nodo raz sabremos que, de estar en el rbol, se encuentra en el subrbol derecho. Para continuar la bsqueda en el subrbol adecuado se aplica el mismo razonamiento.

Por lo tanto, el esquema del algoritmo BuscarNodo ser el siguiente:

1. Si el valor del nodo actual es igual al valor buscado, lo hemos encontrado. 2. Si el valor buscado es menor que el del nodo actual, deberemos inspeccionar el subrbol izquierdo. 3. Si el valor buscado es mayor que el del nodo actual, deberemos inspeccionar el subrbol derecho.

public Nodo find (int llave){ Nodo actual = raz; while (actual.id != llave) { if (llave menor actual.dato) actual = actual.izq; else actual = actual.der; if (actual == null) return null; } //fin while return actual; }

Insercin
La operacin de insercin de un nuevo nodo en un rbol binario de bsqueda consta de tres fases bsicas: 1. Creacin del nuevo nodo 2. Bsqueda de su posicin correspondiente en el rbol. Se trata de encontrar la posicin que le corresponde para que el rbol resultante siga siendo de bsqueda. 3. Insercin en la posicin encontrado. Se modifican de modo adecuado los enlaces de la estructura.

insertar
Public void insertar (int dato) { NodoArbo nuevonodo= new NodoArbol(dato); if (raz == null) raz = nuevonodo; else { NodoArbol actual = raz; NodoArbol p;

while(true) { p= actual; if (id < actual.dato) //ir a la izquierda { actual = actual.izq; if (actual == null ) { p.izq = nuevonodo; return; } } //fin ir a la izquierda else

actual = actual.der; if (actual == null) { p.der = nuevonodo; return; } } //fin else ir derecha } //fin while } //fin else no raz } //fin insert

Eliminar
Existen cuatro distintos escenarios:
1. Intentar eliminar un nodo que no existe.
No se hace nada, simplemente se regresa FALSE.

2. Eliminar un nodo hoja.


Caso sencillo; se borra el nodo y se actualiza el apuntador del nodo padre a NULL.

3. Eliminar un nodo con un solo hijo.


Caso sencillo; el nodo hijo se convierte en el padre.

4. Eliminar un nodo con dos hijos.


Caso complejo, es necesario mover ms de una referencia.

Se busca el mximo de la rama izquierda o el mnimo de la rama derecha.

Eliminar (casos sencillos)


Eliminar nodo hoja
Eliminar 3 6

Eliminar nodo con un hijo


Eliminar 4 6

Eliminar (casos complejos)


Eliminar nodo con dos hijos 6 2 1
copiar valor

Eliminar 2

6 3 1 4 3 8

8 4

3
eliminar

Remplazar el dato del nodo que se desea eliminar con el dato del nodo ms pequeo del subrbol derecho Despus, eliminar el nodo ms pequeo del subrbol derecho (caso fcil)

Otro ejemplo (caso complejo)


Eliminar nodo con dos hijos
Eliminar 2

3.5

3.5

Ver grficamente varios ejemplos de eliminacin de un nodo:


a. Si el nodo a borrar no tiene hijos, simplemente se libera el espacio que ocupa b. Si el nodo a borrar tiene un solo hijo, se aade como hijo de su padre (p), sustituyendo la posicin ocupada por el nodo borrado. c. Si el nodo a borrar tiene los dos hijos se siguen los siguientes pasos:
i. Se busca el mximo de la rama izquierda o el mnimo de la rama derecha. ii. Se sustituye el nodo a borrar por el nodo encontrado.

Implementacin ELIMINAR

Fuentes Bibliogrficas

Programacin en Java 2 Algoritmos, Estructuras de Datos y Programacin Orientada a Objetos Luis Joyanes Aguilar, Ignacio Zahonero Mc Graw Hill
Algoritmos Computacionales: Introduccin al anlisis y diseo Sara Baase, Allen Van Gelder. Editorial Addison Wesley ISBN 9702601428

Вам также может понравиться