You are on page 1of 3

public class ABB { Integer raiz; ABB subABizq; ABB subABder; // Constructor de un arbol vacio public ABB() { raiz

= null; subABizq = null; subABder = null; } // constructor de una hoja public ABB( Integer raiz ) { this.raiz = new Integer( raiz ); subABizq = null; subABder = null; } } // avisa si el arbol es vaco o no private boolean esVacio() { boolean vacio = true; if ( raiz != null ) vacio = false; return vacio; } // insercion de un nuevo nodo en el ABB public void insertar( Integer nuevo ) { if( esVacio() ) { raiz = new Integer( nuevo ); subABizq = new ABB(); subABder = new ABB(); } else { if( nuevo < raiz ) { subABizq.insertar(nuevo); } else if ( nuevo > raiz ) { subABder.insertar(nuevo); } } }

// devuelve una referencia al rbol con la raiz buscada, si no encuentra retor na null public ABB buscar( Integer x ) { ABB buscado = null; if( !esVacio() ) { if( x < raiz ) { buscado = subABizq.buscar(x); } else if ( x > raiz ) { buscado = subABder.buscar(x); } else { return this; } } return buscado; }
// retorna una referencia al elemento minimo de un arbol private ABB buscarMin() {

ABB arbolActual = this; while( !arbolActual.subABizq.esVacio() ) { arbolActual = arbolActual.subABizq; } return arbolActual; } // indica si el arbol es una hoja o no private boolean esHoja() { boolean hoja = false; if( subABizq.esVacio() && subABder.esVacio() ) { hoja = true; } return hoja; } // elimina un nodo del ABB public void eliminar( Integer a ) { ABB aEliminar = buscar(a); if (aEliminar != null) { if( aEliminar.esHoja() ) { aEliminar.raiz = null; } else { ABB min = aEliminar.subABder.buscarMin(); aEliminar.raiz = min.raiz; min.eliminar(min.raiz); } } } // recorrido en preorden public void preOrden() { if( !esVacio() ) { System.out.println( raiz ); subABizq.preOrden(); subABder.preOrden(); } } // recorrido enorden public void enOrden() { if( !esVacio() ) { subABizq.enOrden(); System.out.println( raiz ); subABder.enOrden(); } } // recorrido postorden public void postOrden() { if( !esVacio() ) { subABizq.postOrden(); subABder.postOrden(); System.out.println( raiz ); } } // recorrido por nivel public void porNivel() { Vector<ABB> cola = new Vector<ABB>(); ABB arbol;

cola.add(this); while( !cola.isEmpty() ) { arbol = cola.elementAt(0); cola.remove(0); System.out.println( arbol.raiz ); if ( !arbol.subABizq.esVacio() ) cola.add( arbol.subABizq ); if (!arbol.subABder.esVacio() ) cola.add( arbol.subABder ); } }

MAIN public class Main { public static void main(String[] args) { ABB arbol = new ABB(); arbol.insertar(5); arbol.insertar(3); arbol.insertar(7); arbol.insertar(1); arbol.insertar(4); arbol.insertar(6); arbol.insertar(10); arbol.insertar(2); arbol.insertar(8); arbol.insertar(15); arbol.insertar(9); System.out.println("Mostrando por niveles:"); arbol.porNivel(); arbol.eliminar(11); System.out.println("Mostrando en preorden:"); arbol.preOrden(); arbol.eliminar(6); System.out.println("Mostrando en postorden (eliminado 6):"); arbol.postOrden(); } }

You might also like