You are on page 1of 8

2014

Arely Martnez Mora


Magaly Giovanna Muoz
Mndez
07/06/2014
REPORTE DE ARBOL BINARIO
Reporte de rbol Binario
Un rbol binario es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y
un hijo derecho. No pueden tener ms de dos hijos, de ah el nombre binario. Si algn hijo tiene
como referencia a null, es decir que no almacena ningn dato, entonces este es llamado un nodo
externo. En el caso contrario el hijo es llamado un nodo interno.
Un rbol Binario es un conjunto de finito de Elementos, de nombre Nodos de forma que:
El rbol Binario es Vaci si no tiene ningn elemento en l.
El rbol Binario contiene un Nodo Raz y los dos que parten de l, llamados Nodo Izquierdo y
Nodo Derecho.
Los rboles tienen 3 Recorridos Diferentes los cuales son:
1. Pre-Orden
2. In-Orden
3. Post-Orden
El recorrido de rboles refiere al proceso de visitar de una manera sistemtica, exactamente una
vez, cada nodo en una estructura de datos de rbol (examinando y/o actualizando los datos en los
nodos).
Pre-Orden: (raz, izquierdo, derecho). Para recorrer un rbol binario no vaco en Pre-Orden, hay
que realizar las siguientes operaciones recursivamente en cada nodo, comenzando con el nodo de
raz:
Visite la raz
Atraviese el sub-rbol izquierdo
Atraviese el sub-rbol derecho

In-Orden: (izquierdo, raz, derecho). Para recorrer un rbol binario no vaco en In-Orden
(simtrico), hay que realizar las siguientes operaciones recursivamente en cada nodo:
Atraviese el sub-rbol izquierdo
Visite la raz
Atraviese el sub-rbol derecho


Post-Orden: (izquierdo, derecho, raz). Para recorrer un rbol binario no vaco en Post-Orden, hay
que realizar las siguientes operaciones recursivamente en cada nodo:
Atraviese el sub-rbol izquierdo
Atraviese el sub-rbol derecho
Visite la raz

En general, la diferencia entre Pre-Orden, In-Orden y Post-Orden es cundo se recorre la raz. En
los tres, se recorre primero el sub-rbol izquierdo y luego el derecho.
En Pre-Orden, la raz se recorre antes que los recorridos de los subrboles izquierdo y
derecho
En In-Orden, la raz se recorre entre los recorridos de los rboles izquierdo y derecho, y
En Post-Orden, la raz se recorre despus de los recorridos por el subrbol izquierdo y el
derecho
A continuacin se expone un cdigo de un rbol binario, el cual se ha comentado sobre lo que se
realiza en cada parte del cdigo
package principalarbool;

//CODIGO ARBOL BINARIO CON RECORRIDOS EN PREORDEN, INORDEN y POSORDEN
//programa para probar la clase arbol
public class PrincipalArbool {

public static void main(String[] args) {
PrincipalArbool ob=new PrincipalArbool(); //Creacion de objeto de
la clase PrincipalArbool
ob.ejer8(); //Aqui mandamos a llamar el metodo a la clase
principal
}

public void ejer8(){ // metodo en el cual se obtienen los datos que
se agregagaran y se llaman los metodos que hacen los recorrimientos
// ademas de que los imprime en pantalla.
Arbol arbol = new Arbol(); //creacion del objeto Arbol, que
proviene de la clase arbol, en la cual se insertaran los nodos y se haran
//los diferentes recorridos
del arbol, preorden inorden posorden.
int valor; //declaracion de la variable valor, en la cual se
almacenan los valores que corresponde a cada nodo

System.out.println( "Insertando los siguientes valores:
");//mensaje en pantalla que muestra los datos que se ingresaron al arbol

//insertando 7 numeros aleatorios del 0 al 20 en el arbol
for (int i = 1; i<=7 ; i++)
{
valor = (int) (Math.random() * 20);//asigna los numeros
al azar
System.out.print(valor + " ");
arbol.insertarNodo(valor);//hace referencia a un metodo
de la clase arbol donde se insertan los nodos del arbol
}

System.out.println("\n\nRecorrido preorden"); //Impresion en
pantalla del recorrido en preorden
arbol.recorridoPreorden();//hace referencia a un metodo de la
clase arbol donde se imprimen los datos en preorden

System.out.println("\n\nRecorrido inorden");//Impresion en
pantalla del recorrido en inorden
arbol.recorridoInorden();//hace referencia a un metodo de la
clase arbol donde se imprimen los datos en preorden

System.out.println("\n\nRecorrido posorden");//Impresion en
pantalla del recorrido en posorden
arbol.recorridoPosorden();//hace referencia a un metodo de la
clase arbol donde se imprimen los datos en posorden
}
}

//arbol en java inorden, posorden, preorden */
//definicion de la clase NodoArbol, en esta clase se acomodan los datos
en cada nodo del arbol
class NodoArbol {

//miembros de acceso o declaracion de variables
NodoArbol nodoizquierdo;
int datos;
NodoArbol nododerecho;

//Metodo constructor donde se iniciara un dato y se hara este dato
o nodo, un nodo hoja;
// un nodo hoja quiere decir que no tiene hijos o que termina el
arbol
public NodoArbol(int datosNodo)
{
datos = datosNodo;//se inicializa el dato que esta como nodo
raiz, que seran en su momento todos los datos que se menteran al arbol
//en el comiezo de la isercion de datos
el primer numero sera en nodo raiz
nodoizquierdo = nododerecho = null; //el nodo no tiene hijos,
es decir que el arbol esta vacio
}

//buscar punto de insercion e insertar nodo nuevo
public synchronized void insertar(int valorInsertar)
{
//insertar en subarbol izquierdo
if (valorInsertar < datos){//si en numero que se insertara es
menor que el nodo raiz, se prosigue
//inserta nuevo nodoarbol
if (nodoizquierdo == null)//si el nodo izquierdo donde
se quiere poner el dato esta vacio, entonces lo inserta
nodoizquierdo = new NodoArbol(valorInsertar);
else //sino continua recorriendo subarbol izquierdo e
inserta
nodoizquierdo.insertar(valorInsertar);
}

//insertar nodo derecho
else if(valorInsertar > datos){//si al dato que se insertara
es mayor al nodo raiz, se prosigue

//insertar nuevo nodoarbol
if (nododerecho == null)//si el nodo derecho donde se quiere
poner el dato esta vacio, entonces lo inserta
nododerecho = new NodoArbol(valorInsertar);
else //sino continua recorriendo subarbol derecho
nododerecho.insertar(valorInsertar);
}
//NOTA: se tiene que hacer este procedimiento por cada
insercion en cada nivel del arbol, es decir, comparar siempre
//si el numero a insertar es mayor o menor al nodo raiz del
nivel.
} //fin del metodo insertar

} //fin clase nodoarbol

//---------- CLASE ARBOL------------------
class Arbol{//en esta clase se almacenan los metodos de los recorridos
private NodoArbol raiz; //de declara la variable raiz como tipo
nodo arbol
//esto se hace ya que se construira un nuevo arbol y se necesita
eu la variabla raiz haga lo que realiza el
//metodo insertar de la clase NodoArbol

//se empieza a contruir un arbol vacio
public Arbol()
{
raiz = null;//es decir que el arbol esta vacio
}

//insertar un nuevo nodo en el arbol de busqueda binaria
public synchronized void insertarNodo(int valorInsertar)//metodo
que empieza la inserccion de los nodos
//este metodo es synchronized, ya que se llama cuando se
necesita y solo se puede ingresar si se cumplen las condiones
//es decir, como una llave de entrada y un cuello de
botella, ya que solo se puede ungresar de uno en uno
{
if(raiz == null)//si la raiz es nula, es decir esta vacio,
realiza lo siguiente
raiz = new NodoArbol(valorInsertar); //se crea el nodo
raiz que sera el primer elemento del arbol

else
raiz.insertar(valorInsertar); // se llama al metodo
insertar, en la cual se realizara lo que se explica en el metodo
}//NOTA: se hara esto haste que se inserten todos los datos en el
arbol

//--------------- EMPESAR EL RECORRIDO EN PREORDEN-----------------
------
public synchronized void recorridoPreorden()//metodo que llama el
metodo donde se realiza el preorden de manera recursiva
{
ayudantePreorden(raiz);//llamada del metodo que recive como
parametro el valor de la raiz, es decir el nodo
}

//metodo recursivo para recorrido en preorden, un Recorrido en
preorden toma el nodo raiz como principal, luego el nodo izquierdo
// y por ultimo el nodo derecho, as sucesivamente, es un metodo
recursivo ya que se regresa para comparar cada uno de los niveles y nodos
private void ayudantePreorden(NodoArbol nodo)//este metodo recibe
como parametro el nodo de tipo NodoArbol
{
if (nodo == null)//si el nodo es nulo retorna las impreciones
de pantalla
return;
System.out.print(nodo.datos + " "); // mostrar datos del nodo
ayudantePreorden(nodo.nodoizquierdo); //recorre subarbol
izquierdo
ayudantePreorden(nodo.nododerecho); //recorre subarbol
derecho
}

//--------------EMPEZAR RECORRIDO INORDEN--------------------------
---------
public synchronized void recorridoInorden()
{
ayudanteInorden(raiz);
}

//metodo recursivo para recorrido en inorden, un Recorrido en
inorde toma el nodo izquierdo como principal, luego el nodo raiz
// y por ultimo el nodo derecho, as sucesivamente, es un metodo
recursivo ya que se regresa para comparar cada uno de los niveles y nodos

private void ayudanteInorden(NodoArbol nodo)
{
if (nodo == null)
return;

ayudanteInorden(nodo.nodoizquierdo);//recorre subarbol
izquierdo
System.out.print(nodo.datos + " ");// mostrar datos del nodo
ayudanteInorden(nodo.nododerecho);//recorre subarbol derecho
}

//-----------------------------EMPEZAR RECORRIDO POSORDEN----------
-----------------------
public synchronized void recorridoPosorden()
{
ayudantePosorden(raiz);
}

//metodo recursivo para recorrido en posorden, un Recorrido en
posorden toma el nodo izquierdo como principal, luego el nodo derecho
// y por ultimo el nodo raiz, as sucesivamente, es un metodo
recursivo ya que se regresa para comparar cada uno de los niveles y nodos

private void ayudantePosorden(NodoArbol nodo)
{
if (nodo == null)
return;

ayudantePosorden(nodo.nodoizquierdo);//recorre subarbol
izquierdo
ayudantePosorden(nodo.nododerecho);//recorre subarbol derecho
System.out.print(nodo.datos + " ");// mostrar datos del nodo
}

}//fin clase rbol

You might also like