En este ejercicio consideraremos árboles que representan expresiones
binarias sobre los operadores +, -,
*, y sobre operandos naturales. Por ejemplo, el siguiente
árbol representa la expresión
.
-
|-- 5
'-- +
|-- 3
'-- *
|-- 4
'-- 2
Todos los nodos del árbol que son hojas contienen un valor natural, y los nodos con hijos siempre tienen 2 y su valor es siempre un operador. No hay subárboles vacíos.
Implementad, pues, la siguiente función:
/**
* @brief Avalua un arbre no buit que representa una expressió binària.
*
* L'expressió binària és sobre els naturals i els operadors +, -, i *.
* Les operacions de l'arbre no produeixen errors de sobreeiximent
* (_overflow_).
*
* @pre L'arbre és no buit i l'expressió binària és correcta.
*
* @param t Arbre que representa l'expressió binària.
* @return Resultat de l'avaluació de l'expressió.
*/
int evaluate(BinTree<string> t);
Los ficheros públicos (icono del gatito) contienen:
bintree.hh |
la clase BinTree |
bintree-io.hh |
la entrada/salida de
BinTree |
util.hh y
util.cc |
un módulo de utilidades con
is_number y string_to_int |
eval.hh |
la declaración de la función a implementar |
main.cc |
el programa principal |
También hay un Makefile y el directorio
.vscode que tiene la configuración para compilar y depurar
con VSCode.
Hay que implementar evaluate en un fichero
.cc nuevo, compilar, y finalmente enviar
solo el fichero con la función.
Cada caso consiste en una representación textual de una expresión binaria del tipo definido. (Esta lectura ya la hace el programa principal.)
Para cada caso, la salida es el resultado de evaluar la expresión, cada resultado en una línea separada. (Esto también lo hace el programa principal.)
Input
*
|-- 3
'-- +
|-- 7
'-- 4
+
|-- *
| |-- 3
| '-- 2
'-- 4
+
|-- +
| |-- 1
| '-- 5
'-- *
|-- 10
'-- 7
Output
33 10 76