martes, 29 de enero de 2013

EJEMPLO DE ARBOL EN JAVA 2

//arbol en java inorden, posorden, preorden */

//definicion de la clase NodoArbol
class NodoArbol {

 //miembros de acceso
 NodoArbol nodoizquierdo;
 int datos;
 NodoArbol nododerecho;

 //iniciar dato y hacer de este nodo un nodo hoja
 public NodoArbol(int datosNodo)
 {
  datos = datosNodo;
  nodoizquierdo = nododerecho = null; //el nodo no tiene hijos
 }

 //buscar punto de insercion  e insertar nodo nuevo
 public synchronized void insertar(int valorInsertar)
 {
  //insertar en subarbol izquierdo
  if (valorInsertar < datos){

   //inserta nuevo nodoarbol
   if (nodoizquierdo == null)
    nodoizquierdo = new NodoArbol(valorInsertar);
   else //continua recorriendo subarbol izquierdo
    nodoizquierdo.insertar(valorInsertar);
  }

  //insertar nodo derecho
  else if(valorInsertar > datos){

  //insertar nuevo nodoarbol
  if (nododerecho == null)
   nododerecho = new NodoArbol(valorInsertar);
  else //continua recorriendo subarbol derecho
   nododerecho.insertar(valorInsertar);
  }
 } //fin del metodo insertar

} //fin clase nodoarbol

//---------- CLASE ARBOL------------------
 class Arbol{
 private NodoArbol raiz;

 //contruir un arbol vacio
 public Arbol()
 {
  raiz = null;
 }

 //insertar un nuevo nodo en el arbol de busqueda binaria
 public synchronized void insertarNodo(int valorInsertar)
 {
  if(raiz == null)
   raiz = new NodoArbol(valorInsertar); //crea nodo raiz

  else
   raiz.insertar(valorInsertar); // llama al metodo insertar
 }

 //--------------- EMPESAR EL RECORRIDO EN PREORDEN-----------------------
 public synchronized void recorridoPreorden()
 {
  ayudantePreorden(raiz);
 }
 //metodo recursivo para recorrido en preorden

 private void ayudantePreorden(NodoArbol nodo)
 {
  if (nodo == null)
   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 inorden

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

  ayudanteInorden(nodo.nodoizquierdo);
  System.out.print(nodo.datos + " ");
  ayudanteInorden(nodo.nododerecho);
 }

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

 //metodo recursivo para recorrido posorden

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

  ayudantePosorden(nodo.nodoizquierdo);
  ayudantePosorden(nodo.nododerecho);
  System.out.print(nodo.datos + " ");
 }

}//fin clase arbol

//programa para probar la clase arbol

public class PruebaArbol {
 public static void main(String args[])
 {
  Arbol arbol = new Arbol();
  int valor;

  System.out.println( "Insertando los siguientes valores: ");

  //insertando 10 numeros aleatorios del 0 al 99 en el arbol
  for (int i = 1; i<=10 ; i++)
  {
   valor = (int) (Math.random() * 100);
   System.out.print(valor + " ");
   arbol.insertarNodo(valor);
  }

  System.out.println("\n\nRecorrido preorden");
  arbol.recorridoPreorden();

  System.out.println("\n\nRecorrido inorden");
  arbol.recorridoInorden();

  System.out.println("\n\nRecorrido posorden");
  arbol.recorridoPosorden();
 }
}

No hay comentarios:

Publicar un comentario