Árbol de Múltiplos T56798


Statement
 

pdf   zip   tar

Decimos que un árbol binario de números naturales TT es un árbol "de múltiplos" cuando, para todo nodo que no sea una hoja, los valores de las raíces de los subárboles izquierdo y derecho, EE y DD, si no son vacíos, son múltiplos del valor en la raíz de TT. Consideraremos que un múltiplo de nn es un natural m=nkm = nk tal que k>=1k >= 1. Por ejemplo, el siguiente árbol es de múltiplos:

1
|- 2
|  |- 4
|  '- #
'- 3
   |- 9
   '- 6
      |- 6
      '- 12

Haz una función arbre_de_multiples con cabecera:

/**
 * @brief Determina si un árbol es "de múltiplos"
 *
 * @param  t  Un árbol binario de naturales
 *
 * @returns  `true` si `t` es un árbol de múltiplos
 *           `false` en caso contrario.
 */
bool arbre_de_multiples(BinTree<int> t);

Observación

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

main.cc el programa principal, con la entrada/salida ya 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
.vscode para compilar y debuggar con VSCode

Hay que implementar arbre_de_multiples en un archivo .cc nuevo, compilar, y finalmente enviar solo el archivo con la función y funciones auxiliares si son necesarias.

Entrada

(Esto ya lo hace el programa principal dado). La entrada comienza con "visual" o "inline" para indicar el formato de los árboles de entrada. Después viene una secuencia de árboles en el formato indicado.

Salida

(Esto también lo hace el programa principal dado). La salida son los strings resultantes de llamar a la función arbre_de_multiples, un resultado por línea.

Public test cases
  • Input

    visual
    5
    
    1
    |-- 2
    '-- 1
    
    1
    |-- 3
    '-- 5
    
    2
    |-- 3
    '-- 1
    
    1
    |-- 2
    '-- 3
    
    3
    |-- 3
    '-- 1
        |-- 3
        '-- 2
    
    2
    |-- 6
    |   |-- 30
    |   '-- 12
    '-- 4
    
    

    Output

    si
    si
    si
    no
    si
    no
    si
    
  • Input

    inline
    5
    1(2,1)
    1(3,)
    2(3,1)
    1(2,3)
    3(3,1(3,2))
    2(6(30,12),4)
    

    Output

    si
    si
    si
    no
    si
    no
    si
    
  • Information
    Author
    Mª Lluïsa Bonet i Pau Fernández
    Language
    Spanish
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++