- //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();
- }
- }