Está en la página 1de 4

ARBOLES BB COMPETO

package paqArbolbb;

public class CArbolBB {

private class nodoArbol {


//Atributos
private CArbolBB hd;//aSubArbolDerecho
private CArbolBB hi;//aSubArbolIzquierdo
private int dato; //aRaiz
//Cosntructores
private void nodoArbol(){
hd = null;
hi = null;
dato = 0;
}
}

public nodoArbol raiz;

public void CArbolBB(){


nodoArbol raiz = new nodoArbol();
}

public boolean esVacio(){


return (raiz == null);
}

public void insertar(int a){


if (esVacio()) {
nodoArbol nuevo = new nodoArbol();
nuevo.dato = a;
nuevo.hd = new CArbolBB();
nuevo.hi = new CArbolBB();
raiz = nuevo;
}
else {
if (a > raiz.dato) {
(raiz.hd).insertar(a);
}
if (a < raiz.dato){
(raiz.hi).insertar(a);
}
}
}

public void preOrder(){


if (!esVacio()) {
System.out.print( raiz.dato + ", " );
raiz.hi.preOrder();
raiz.hd.preOrder();
}
}
public void inOrder(){
if (!esVacio()) {
raiz.hi.inOrder();
System.out.print( raiz.dato + ", " );
raiz.hd.inOrder();
}
}

public void posOrder(){


if (!esVacio()) {
raiz.hi.posOrder();
raiz.hd.posOrder();
System.out.print( raiz.dato + ", " );
}
}

public CArbolBB buscar(int a){


CArbolBB arbolito = null;
if (!esVacio()) {
if (a == raiz.dato) {
return this;
}
else {
if (a < raiz.dato) {
arbolito = raiz.hi.buscar(a);
}
else {
arbolito = raiz.hd.buscar(a);
}
}
}
return arbolito;
}

public boolean existe(int a){


if (!esVacio()) {
if (a == raiz.dato) {
return true;
}
else {
if (a < raiz.dato) {
raiz.hi.existe(a);
}
else {
raiz.hd.existe(a);
}
}
}
return false;
}

public int cantidad(){


if (esVacio()) {
return 0;
}
else {
return (1 + raiz.hd.cantidad() + raiz.hi.cantidad());
}
}

public int altura() {


if (esVacio()) {
return 0;
}
else {
return
1+(Math.max(((raiz.hi).altura()),((raiz.hd).altura())));
}
}
public int buscarMin() {
CArbolBB arbolActual = this;
while( !arbolActual.raiz.hi.esVacio() ) {
arbolActual = arbolActual.raiz.hi;
}
int devuelvo= arbolActual.raiz.dato;
arbolActual.raiz=null;
return devuelvo;
}

public int buscarMan() {


CArbolBB arbolActual = this;
while( !arbolActual.raiz.hd.esVacio() ) {
arbolActual = arbolActual.raiz.hd;
}
int devuelvo= arbolActual.raiz.dato;
arbolActual.raiz=null;
return devuelvo;
}

public boolean esHoja() {


boolean hoja = false;
if( (raiz.hi).esVacio() && (raiz.hd).esVacio() ) {
hoja = true;
}
return hoja;
}

public void eliminar(int a) {


CArbolBB paraEliminar = buscar(a);
if (!paraEliminar.esVacio()) {
if (paraEliminar.esHoja()) {
paraEliminar.raiz = null;
}
else {
if (!paraEliminar.raiz.hi.esVacio() &&
!paraEliminar.raiz.hd.esVacio()) {
paraEliminar.raiz.dato =
paraEliminar.raiz.hd.buscarMin();
}
else {
if (paraEliminar.raiz.hi.esVacio()) {
paraEliminar.raiz = paraEliminar.raiz.hd.raiz;
}else{
paraEliminar.raiz = paraEliminar.raiz.hi.raiz;
}
}
}
}
}
}

PRINCIPAL
package paqArbolbb;

public class main {

public static void main(String[] args) {


//Declarar variables
int h;
//Instanciando a la clase CArbol
CArbolBB arbol=new CArbolBB();
//Agregar elementos al arbol
arbol.insertar(36);
arbol.insertar(81);
arbol.insertar(25);
arbol.insertar(35);
arbol.insertar(33);
arbol.insertar(74);
arbol.insertar(10);
arbol.insertar(90);
//Mostrar el recorrido en PreOrden
System.out.println("El recorrido In Orden es: ");
arbol.inOrder();
System.out.println("\nEl recorrido en Pre Orden es:");
arbol.preOrder();
System.out.println("\nEl recorrido en Post Orden");
arbol.posOrder();
h=arbol.altura();
System.out.println("\nLa altura es: "+h);
//Eliminar 36
arbol.eliminar(36);
arbol.preOrder();
}

También podría gustarte