• Domingo 15 de Diciembre de 2024, 13:54

Autor Tema:  Ayuda Practica C++!!!  (Leído 1275 veces)

Fxbrandon

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Ayuda Practica C++!!!
« en: Miércoles 19 de Mayo de 2004, 11:31 »
0
Estoy haciendo la Carrera de Informatica de Gestion y necesito una practica muy jodida de C++ (linux) sobre representacion de expresiones en arboles binarios. Es una practica de una calculadora polaca inversa (1 1 + ...) y la verdad es que esta muy jodido el tema pk se ha de hacer con memoria dinamica y tal... Alguien ha realizados alguna practica similar para hacer esto???? Gracias peña!!!!

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Ayuda Practica C++!!!
« Respuesta #1 en: Jueves 20 de Mayo de 2004, 13:39 »
0
Hola.

El algoritmo a desarrollar es muy sencillo. Lo que tienes que hacer es tomar la expresión en notación polaca inversa y empezar a leerla por la derecha.

Date cuanta de que el árbol se va construyendo en un recorrido en profundidad.

Lo primero es crear un nodo inicial. A partir de él has de hacer lo siguiente:

- Si te encuentras con un operador (+,-,*,etc) creas un nodo de tipo, digamos, nodo_op, lo añades como hijo del nodo actual y pasas al nuevo nodo.

- Si te encuentras con un número creas un nodo de tipo nodo_num y lo añades como hijo al nodo actual (pero no pasas al nuevo nodo).

 · Para los dos casos anteriores, si no hubiera más hijos libres en el nodo actual (ya que no puede haber más de dos) sigues el recorrido en profundidad del árbol hasta encontrar un nodo con un hijo libre.

Cuando hayas acabado de crear el árbol de la expresión, todas las hojas deberán ser nodos del tipo nodo_num, y el resto de nodos del tipo nodo_op.

Ahora sólo te resta ir recorriendo el árbol en profundidad con una función recursiva que vaya resolviendo los nodo_op. Algo de este estilo:

Código: Text
  1.  
  2. int resolver(nodo)
  3. {
  4.     si nodo es de tipo nodo_num
  5.         devolver valor del nodo
  6.     si no
  7.         devolver resolver(hijo_izq) op resolver(hijo_dcho)
  8. }
  9.  
  10.  

donde op es la operación que está asociada al nodo_op actual.

Con esta explicación ya sólo te resta implementar tal cual lo que te he descrito.

Un saludo.

Ruben3d