Evaluar expresiones binarias (1) U38461


Statement
 

pdf   zip   tar

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))5 - (3 + (4 \times 2)).

-
|-- 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);

Observación

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.

Entrada

Cada caso consiste en una representación textual de una expresión binaria del tipo definido. (Esta lectura ya la hace el programa principal.)

Salida

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.)

Public test cases
  • Input

    *
    |-- 3
    '-- +
        |-- 7
        '-- 4
    
    +
    |-- *
    |   |-- 3
    |   '-- 2
    '-- 4
    
    +
    |-- +
    |   |-- 1
    |   '-- 5
    '-- *
        |-- 10
        '-- 7
    
    

    Output

    33
    10
    76
    
  • Information
    Author
    Guillem Godoy i Pau Fernández
    Language
    Spanish
    Translator
    Pau Fernández
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++