int _tmain(int argc, _TCHAR* argv[]) { stack<Elemento *> s; s.push(new OperadorMultiplicacion()); s.push(new Operando(5)); s.push(new Operando(5)); while (s.size() > 1) { Operando * a = static_cast<Operando*>(s.top()); Operando * b = static_cast<Operando*>(s.top()); s.pop(); s.pop(); Operador * op = static_cast<Operador*>(s.top()); s.pop(); s.push(op->operar(a, b)); delete op; delete b; delete a; } Operando * r = static_cast<Operando*>(s.top()); s.pop(); cout << "El resultado es " << r->get() << endl; system("pause"); return 0; }
void Arbol::resolverRe(Elemento *& nodo){ Operador * operador = dynamic_cast<Operador*>(nodo); if (operador != NULL){ if (nodo->getHijoIzq() != NULL){ resolverRe(nodo->getHijoIzq()); } if (nodo->getHijoDer() != NULL){ resolverRe(nodo->getHijoDer()); } nodo = operador->operar(nodo->getHijoIzq(), nodo->getHijoDer()); } }
void Arbol::solucionarRec(Elemento *& actual) { Elemento * izq = actual->getHijoIzquierdo(); Elemento * der = actual->getHijoDerecho(); Operador * op = dynamic_cast<Operador*>(actual); if (op != NULL) { if (izq != NULL) { solucionarRec(actual->getHijoIzquierdo()); } if (der != NULL) { solucionarRec(actual->getHijoDerecho()); } Elemento * solucion = op->operar(actual->getHijoIzquierdo(), actual->getHijoDerecho()); delete actual; actual = solucion; } }