Árbol binario con todas las hojas iguales T82960


Statement
 

pdf   zip   tar

Dado un árbol binario, sus hojas son los subárboles que tienen las dos ramas left y right vacías. Además, en este problema consideraremos exclusivamente árboles binarios que no tienen subárboles con solo una rama vacía. Es decir, en este tipo de árboles un subárbol es: o bien una hoja, o bien las dos ramas son subárboles no vacíos.

Implementa la función tree_all_leaves_equal, que determina si, en un árbol binario de enteros, todas las hojas tienen el mismo valor:

/**
 * @brief Determina si todas las hojas de un árbol tienen
 *        el mismo valor.
 *
 * @param  t  Un árbol binario de enteros
 * @returns  `true` si todas las hojas son iguales,
 *           `false` en caso contrario.
 *
 * @pre  En todos los subárboles de `t` se cumple: o bien son
 *       hojas, o bien las dos ramas son no vacías.
 */
bool tree_all_leaves_equal(BinTree<int> t);

Observación

Los ficheros públicos (icono del gatito) contienen:

main.cc el programa principal, con la entrada/salida hecha
bintree.hh la clase BinTree<T>
bintree-io.hh la entrada/salida de BinTree<T>
bintree-inline.hh la entrada/salida "inline" de BinTree<T>
Makefile para compilar con make cómodamente
.vscode carpeta para compilar y depurar con VSCode

Hay que implementar tree_all_leaves_equal en un fichero .cc nuevo, compilar, y finalmente enviar solo el fichero con la función.

Entrada

La entrada empieza con "visual" o "inline" para indicar el formato de los árboles de entrada. Después viene una secuencia de árboles en el formato indicado. (De esto se encarga el programa principal).

Salida

Para cada árbol, la salida es true si todas las hojas tienen el mismo valor, o false en caso contrario. (De esto se encarga el programa principal.)

Public test cases
  • Input

    visual
    
    8
    
    -5
    |-- 3
    '-- 1
    
    1
    |-- 2
    '-- 2
    
    6
    |-- 0
    '-- 1
        |-- 0
        '-- 2
    
    3
    |-- 2
    |   |-- 4
    |   '-- 4
    '-- 4
    
    

    Output

    true
    false
    true
    false
    true
    
  • Input

    inline
    1(7(3,3),10(7,3))
    5(2(6,2(6,8)),9(6,3(6,6)))
    3(2,2)
    6(7(5,7(5,5)),3(5(5,5),5))
    8(7,4(8,8))
    6(4(1(9,9),9),4(9,6(9,9)))
    6(5(7,7),7)
    6(4(8,8),8)
    1(1(2,2),2)
    5(2,5)
    

    Output

    false
    false
    true
    true
    false
    true
    true
    true
    true
    false
    
  • Information
    Author
    Pau Fernández
    Language
    Spanish
    Translator
    Pau Fernández
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++