Foro de elhacker.net

Programación => Java => Mensaje iniciado por: m@o_614 en 3 Enero 2015, 05:42 am



Título: problema con un arbol en una pila
Publicado por: m@o_614 en 3 Enero 2015, 05:42 am
Saludos

Tengo el siguiente codigo que lo que trabaja con una cola(Queue) y esta cola contiene una expresión en su forma postfija por ejemplo:

si tengo ((A*B) + (C/D)), la cola contendria : AB*CD/+, y luego tengo que crear el arbol binario de esta expresión. Para eso uso el siguiente algoritmo que trabaja con una pila

Código
  1. public static void construirArbol(){
  2.     int error = 0;
  3.     Stack<Object> pila = new Stack<Object>();
  4.     Arbol arbol = new Arbol();
  5.     Object izq,der,raiz,Elemento;
  6.     String d = "hijoDer",i = "hijoIzq",r = "raiz";
  7.     while(!s.isEmpty())
  8.     {
  9.        switch(caso(s.peek()))
  10.        {
  11.            case 1:
  12.               if(pila.size() < 2)
  13.                  error = 1;
  14.               else
  15.               {
  16.               raiz = s.peek();
  17.               der = pila.pop();
  18.               izq = pila.pop();
  19.               arbol.insertarNodo(raiz,r);
  20.               arbol.insertarNodo(izq,i);
  21.               arbol.insertarNodo(der,d);
  22.               pila.push(arbol);
  23.               }
  24.               break;
  25.            case 2:
  26.               error = 1;
  27.               break;
  28.            default:
  29.               pila.push(s.remove());
  30.        }
  31.     }
  32.     if(pila.isEmpty() || pila.size() > 1)
  33.       error = 1;
  34.     else
  35.     {
  36.     Elemento = pila.pop();
  37.     if(Elemento.)
  38.     {
  39.     //aqui el problema;
  40.     }
  41.     }
  42.     while(!pila.isEmpty())
  43.       pila.pop();
  44.    }

primero dentro de un while tengo a s, que es la Cola y voy quitando elemento por elemento y en un switch veo en cual case entra, si el elemento es un operador entra en el case 1 y si la pila contiene menos de 2 elementos es un error, sino creas un arbol con una raiz, que es el elemento, y despues sacas otros dos elementos de la cola para crear los nodos izquierdo y derecho y metes ese arbol en la pila, en el case default el elemento que se encuentre en s lo apilas.

Pero tengo una duda, una vez que te sales de ese while te encuentras con un if-else, ese if te dice que si la pila esta vacia o tiene mas de un elemento hay un error, y en el else tengo que quitar un elemento de Queue y verificar si ese elemento es un Arbol, pero COMO PUEDO VERIFICAR SI ES UN ARBOL??? si yo cuando declare la pila la declara para que pudiera contener elementos de cualquier tipo, por eso le puse Object

si alguien me pudiera dar una idea de como hacer esa verificación se lo agradecería mucho