3. TERMINOLOGIA
5. CONCLUSIONES
6. BIBLIOGRAFIA
Si T contiene una raz R, los dos rboles T1 y T2 se llaman, respectivamente, subrboles izquierdo y derecho de la raz R. Si T1 no es vaci, entonces su raz se llama sucesor izquierdo de R; y anlogamente, si T2 no es vaci, su raz se llama sucesor derecho de R. Observe que: a. b. B es un sucesor izquierdo y C un sucesor derecho del nodo A. El subrbol izquierdo de la raz A consiste en los nodos B, D, E y F, y el subrbol derecho de A consiste en los nodos C , G, H, J, K
Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. En un rbol binario cada nodo puede tener cero, uno o dos hijos (subrboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.
3. TERMINOLOGIA
La terminologa que por lo regular se utiliza para el manejo de arboles es la siguiente:
Hijo: X es hijo de Y, s y solo s el nodo X es apuntado por Y. Tambin se dice que X es descendiente directo de Y. Padre: X es padre de Y s y solo s el nodo X apunta a Y. Tambin se dice que X es antecesor de Y. Hermano: Dos nodos sern hermanos si son descendientes directos de un mismo nodo. Hoja: Se le llama hoja o terminal a aquellos nodos que no tienen ramificaciones (hijos). Nodo anterior: Es un nodo que no es raz ni terminal. Grado: Es el nmero de descendientes directos de un determinado nodo. Grado de un rbol: Es el mximo grado de todos los nodos del rbol. Nivel: Es el nmero de arcos que deben ser recorridos para llegar a un determinado nodo. Por definicin la raz tiene nivel 1. Altura: Es el mximo nmero de niveles de todos los nodos del rbol.
Peso: Es el nmero de nodos del rbol sin contar la raz. Longitud de camino: Es el nmero de arcos que deben ser recorridos para llegar desde la raz al nodo X. Por definicin la raz tiene longitud de camino 1, y sus descendientes directos longitud de camino 2 y as sucesivamente.
Ejemplo: La figura muestra un rbol general T con 13 nodos, A,B,C,D,E,F,G,H,J,K,L,M,N A menos de que se indique lo contrario, la raz de un rbol T es el nodo en lo alto del diagrama, y los hijos de un nodo estn ordenados de izquierda a derecha. As, A es la raz de T y A tiene tres hijos; el primer hijo B, el segundo C y el tercero D. se observa que: a. b. c. d. El nodo C tiene tres hijos. Cada uno de los nodos B y K tienen dos hijos. Cada uno de los nodos D y H tiene un hijo. Los nodos E,F,G,L,J,M y N no tienen hijos.
El ltimo grupo de nodos, los que no tienen hijos, se llaman nodos terminales. Un rbol binario T no es un caso especial de un rbol general T: los rboles binarios y los rboles generales son dos cosas distintas. Las dos diferencias bsicas son:
a. b.
un rbol binario T puede estar vaci, pero un rbol general T no es vaci. Suponga que un nodo N tiene un solo hijo. Entonces el hijo se distingue por ser el izquierdo o el derecho en un rbol binario T, mientras que no existe esa distincin en un rbol general T.
Aunque cada nodo de un rbol binario de bsqueda puede contener un registro entero de datos, la definicin del rbol binario depende de un campo dado cuyos valores son distintos y deben estar ordenados. Supongamos que T es un rbol binario. Entonces T se dice que es un rbol binario de bsqueda ( o rbol binario ordenado) si cada nodo N de T tiene la siguiente propiedad: el valor de N es mayor que cualquier valor del subrbol izquierdo de N y es menor que cualquier valor del subrbol derecho de N. ( no es difcil ver que esta propiedad garantiza el recorrido inorden de T dar una lista ordenada de los elementos de T) .
Preorden(Arbol_binario(r, i, d)) == Construir(r, Concatenar(Preorden(i), Preorden(d))) Inorden(Crear) == Crear Inorden(Arbol_binario(r, i, d)) == Concatenar(Inorden(i), Construir(r, Inorden(d))) Postorden(Crear) == Crear Postorden(Arbol_binario(r, i, d)) == Concatenar(Concatenar(Postorden(i), Postorden(d)), Construir(r, Crear)) ! Se pueden especificar predicados (para rboles de elementos comparables) que determinen si dichos elementos estn distribuidos en el rbol con arreglo a alguna de las ordenaciones o recorridos; para ello empleamos el predicado Est_Ordenada, que se supone definido para listas de nodos. Preordenado, Inordenado, Postordenado: ArbolB Lgico ecuaciones Preordenado(a) == Est_Ordenada(Preorden(a)) Inordenado(a) == Est_Ordenada(Inorden(a)) Postordenado(a) == Est_Ordenada(Postorden(a)) ! Predicados para rbol lleno, rbol completo y rbol equilibrado en altura. Es_Lleno, Es_Completo, Es_Equilibrado: ArbolB Lgico ecuaciones Es_Lleno(Crear) == V Es_Lleno(Arbol_binario(r, i, d)) == (Altura(i) = Altura(d)) and Es_Lleno(i) and Es_Lleno(d) Es_Completo(Crear) == V Es_Completo(Arbol_binario(r, i, d)) == (Altura(i) = Altura(d)) and Es_Lleno(i) and Es_Completo(d)) or (Altura(i) = 1+Altura(d)) and Es_Completo(i) and Es_Lleno(d)) Es_Equilibrado(Crear) == V Es_Equilibrado(Arbol_binario(r, i, d)) == (-1 # Altura(i) - Altura(d) # 1 ) and Es_Equilibrado(i) and Es_Equilibrado(d) Utilizando estas definiciones se pueden demostrar, por induccin estructural, una serie de propiedades tpicas de los rboles binarios: i Para a: ArbolB y j: se cumple 0 < j # Altura(a) 6 Longitud(Nivel(j, a)) # 2j-1 Demostracin: j Para a == Arbol_binario(r, Crear, Crear), la implicacin es trivialmente cierta. j (h. i.) Longitud(Nivel(j, i)) # 2j-1, y Longitud(Nivel(j, d)) # 2j-1 j (p. i.) Para a == Arbol_binario(r, i, d), suponemos que se cumple para i y d. Longitud(Nivel(Suc(j), Arbol_binario(r, i, d))) == SI j = 0 ENTONCES Longitud(Insertar(r, Crear)) SI NO Longitud(Concatenar(Nivel(j, i), Nivel(j, d))) == SI j = 0 ENTONCES 1 SI NO Longitud(Nivel(j, i)) + Longitud(Nivel(j, d)) y por la h. i. Longitud(Nivel(j, i)) + Longitud(Nivel(j, d)) # 2j-1 + 2j-1 = 2j podemos concluir pues, que, en cualquiera de los dos casos: Longitud(Nivel(Suc(j), Arbol binario(r, i, d))) # 2Suc(j)-1 i En particular, para a: ArbolB y j: se cumple: (Es_Lleno(a) and (0 < j # Altura(a))) 6 Longitud(Nivel(j, a)) = 2j-1
5. CONCLUSIONES
De este trabajo se podra decir que un rbol binario se define como un conjunto finito de elementos llamados nodos. En estos casos se puede usar terminologa de relaciones familiares para descubrir las relaciones entre los nodos de un rbol; y que un rbol puede ser implementado fcilmente en una computadora. Es bueno hacer nfasis en esto ya que se puede saber mucho sobre lo que tiene que ver con los rboles; entre las cosas que podemos mencionar se encuentra la raz, los nodos de un rbol y la diferencia entre nodos sucesores y nodos terminales, como se muestran en el contenido del trabajo.
6. BIBLIOGRAFIA
http://www.lcc.uma.es/~galvez/ftp/tad/tadtema4.pdf http://es.wikipedia.org/wiki/%C3%81rbol_binario#M.C3.A9todos_para_almacenar_.C3.A1rboles_binarios http://www.monografias.com/trabajos36/arboles/arboles2.shtml#binarios
PSEUDOCODIGO
En la clase rbol binario se encuentra los mtodos rbol suma uno pblico y otro privado, el que debes llamar desde la clase donde est el main es el publico es decir el que recibe el rbol binario por parmetro, estas son:
//************************************ // clase NodoArbolBinario //************************************ public class NodoArbolBinario { private int info = 0; private NodoArbolBinario derecho = null; private NodoArbolBinario izquierdo = null; public NodoArbolBinario ( int x ) { this.info = x; this.derecho = null; this.izquierdo = null; } public NodoArbolBinario getDerecho(){ return this.derecho; } public void setDerecho(NodoArbolBinario derecho){ this.derecho = derecho; } public int getInfo(){ return this.info; } public void setInfo(int info){ this.info = info; }
public NodoArbolBinario getIzquierdo(){ return this.izquierdo; } public void setIzquierdo(NodoArbolBinario izquierdo){ this.izquierdo = izquierdo; } } //************************************ // clase ArbolBinario //************************************ public class ArbolBinario { private NodoArbolBinario raiz = null; private NodoArbolBinario padre = null; private boolean centinela = false, sw = false; public ArbolBinario () { } public NodoArbolBinario adicionar( int x ) { NodoArbolBinario p = new NodoArbolBinario ( x ), r = null; if ( this.raiz == null ) { this.raiz = p; } else { NodoArbolBinario q = raiz; while ( q != null ) { r = q; if ( x >= q.getInfo() ) { q = q.getDerecho(); } else { q = q.getIzquierdo(); } }
} if ( x >= r.getInfo() ) { r.setDerecho( p ); } else { r.setIzquierdo( p ); } return p; } public ArbolBinario arbolSuma(ArbolBinario tree){ ArbolBinario res = new ArbolBinario(); arbolSuma(res,tree.raiz); return res; } private int arbolSuma(ArbolBinario res, NodoArbolBinario p){ if ( p == null ){ return 0; } else { int sum = p.getInfo(); NodoArbolBinario aux = res.adicionar(sum); sum += arbolSuma(res, p.getIzquierdo() ); sum += arbolSuma(res, p.getDerecho() ); aux.setInfo(sum); return sum; } } }