Arbol ABB java

Iniciado por ditou, 15 Noviembre 2013, 06:38 AM

0 Miembros y 1 Visitante están viendo este tema.

ditou

2)  Escibir un algoritmo que reciba un ABBTDA y determine si se trata de un arbol binario
perfecto..

perfecto = la raiz y todos los nodos intermedios tienen 2 hijos y todas las hjas estan
a la misma profundidad.


public boolean EsPerfecto(ABBTDA a)
{
   ColaPrioridadTDA cola = new ColaPrioridadE();
   int aux = -1;
   int prioridad = -1;
   boolean resultado = true;

   cola.inicializar();
   revisar(a, 0, cola);

   if(cola.colaVacia())
      resultado = false;

   while(!cola.ColaVacia())
   {
      if(aux == -1 && prioridad == -1)
      {
         aux = cola.Primero();
         prioridad = cola.Prioridad();
      }
      else
      {
         if(prioridad != cola.Prioridad())
            resultado = false;
      }

      cola.Desacolar();
   }

   return resultado;
}

public void revisar(ABBTDA a, int altura, ColaPrioridadTDA cola)
{
   if(!a.ArbolVacio())
   {
      if(a.hijoIzquierdo().arbolVacio() && a.hijoDerecho().arbolVacio())
      {
         cola.AcolarPrioridad(a.Raiz(), altura);
      }
      else
      {
         if(!a.hijoIzquierdo().arbolVacio() && !a.hijoDerecho().arbolVacio())
         {
            revisar(a.hijoIzquierdo(), altura+1);
            revisar(a.hijoDerecho(), altura+1);
         }
         else
         {
            cola.Inicializar();
         }
      }
      
   }

}


Se que lo que esta mal es el ELSE que hago cola.Inicializar(); porque despues el programa sigue y guarda cosas en la cola.

Pero no se me ocurre como hacer para que eel programa se corte ahi de alguna forma para que me devuelva la cola vacia cuando un nodo tiene 1 solo hijo.


Saludos.

ditou

Ya lo  pude resolver.

Aunque me gustaría si me pueden ayudar en que si de alguna forma, el metodo Revisar, pueda terminarse en el mismisimo instante que hago cola.InicializarCola();
con algun tipo de instruccion,..




pd: para resolverlo le puse cola.AcolarPrioridad(100, -2), entonces cuando va a verificar ''hay un nodo hoja'' que no esta en la misma altura que el resto. Es medio desastroso, debe existir alguna forma mas limpia de hacerlo, pero no se me ocurre, la verdad.