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