viernes, 19 de abril de 2013


Algoritmo de Búsqueda


// Definición de la clase Nodo Árbol


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 inserción  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 método insertar

} //fin clase nodoarbol

//---------- CLASE ÁRBOL------------------

 class Arbol{
private NodoArbol raiz;

//Construir un árbol vació

public Arbol()
{
raiz = null;
}

//Insertar un nuevo nodo en el árbol de búsqueda binaria

public synchronized void insertarNodo(int valorInsertar)
{
if(raiz == null)
raiz = new NodoArbol(valorInsertar);     //crea nodo raíz

else
raiz.insertar(valorInsertar);      // llama al método insertar
}


//--------------- EMPESAR EL RECORRIDO EN PRE ORDEN-----------------------


public synchronized void recorridoPreorden()
{
ayudantePreorden(raiz);
}

//Método recursivo para recorrido en pre orden

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 IN ORDEN-----------------------------------

public synchronized void recorridoInorden()
{
ayudanteInorden(raiz);
}

// Método 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 POS ORDEN---------------------------------
public synchronized void recorridoPosorden()
{
ayudantePosorden(raiz);
}

//Método 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 árbol

//Programa para probar la clase árbol

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

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

//Insertando 10 números aleatorios del 0 al 99 en el árbol

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