elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: [1]
1  Programación / Java / Arbol ABB java en: 15 Noviembre 2013, 06:38 am
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.
2  Programación / Java / Ayuda Algoritmo Java en: 15 Noviembre 2013, 06:36 am
Hola, alguien me podria explicar como funciona este algoritmo.

Es que no entiendo como es que no se pierden los datos de R, y como es que se guardan cuando hace recursion una y otra vez..

Código:
public TDAConjunto nodosPares( ABBTDA a){

TDAConjunto  r= new ConjuntoLD();
r. InicializarConjunto ();
if (!a. ArbolVacio()){
if (a. Raiz () % 2 == 0)     //verifica si lo que hay en raiz es par
r. Agregar(a.Raiz ());  //agrega al conjunto el dato
TDAConjunto  rI = nodosPares(a. HijoIzq());   
TDAConjunto  rD = nodosPares(a. HijoDer());
while (! rI. ConjuntoVacio()){
int x = rI. Elegir();   //elige al azar del conjunto
r. Agregar(x);   // lo agrega al conjunto
rI.Sacar(x);   // lo saca de rI
}
while (! rD. ConjuntoVacio()){
int x = rD. Elegir();
r. Agregar(x);
rD.Sacar(x);
}
}
return r;
}



Muchas gracias.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines