Академический Документы
Профессиональный Документы
Культура Документы
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 (padre)
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.
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.
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:
}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.
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.
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.
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)
3.5
3.5
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