Arbre binari amb totes les fulles iguals T82960


Statement
 

pdf   zip   tar

thehtml

Donat un arbre binari, les seves fulles són els subarbres que tenen les dues branques left i right buides. A més, en aquest problema considerarem exclusivament arbres binaris que no tenen subarbres amb només una branca buida. És a dir, en aquest tipus d’arbres un subarbre és: o bé una fulla, o bé les dues branques són subarbres no buits.

Implementa la funció tree_all_leaves_equal, que determina si, en un arbre binari d’enters, totes les fulles tenen el mateix valor:

/**
 * @brief Determina si totes les fulles d'un arbre tenen 
 *        el mateix valor.
 * 
 * @param  t  Un arbre binari d'enters
 * @returns  `true` si totes les fulles són iguals, 
 *           `false` altrament.
 *
 * @pre  En tots els subarbres de `t` es compleix: o bé són 
 *       fulles, o bé les dues branques són no buides.
 */
bool tree_all_leaves_equal(BinTree<int> t);

Observació

Els fitxers públics (icona del gatet) contenen:

main.ccel programa principal, amb la entrada/sortida feta
bintree.hhla classe BinTree<T>
bintree-io.hhl’entrada/sortida de BinTree<T>
bintree-inline.hhl’entrada/sortida "inline" de BinTree<T>
Makefileper compilar amb make còmodament
.vscodecarpeta per compilar i debuggar amb VSCode

Cal implementar tree_all_leaves_equal en un fitxer .cc nou, compilar, i finalment enviar només el fitxer amb la funció.

Entrada

L’entrada comença amb "visual" o "inline" per indicar el format dels arbres d’entrada. Després ve una seqüència d’arbres en el format indicat. (D’això s’encarrega el programa principal).

Sortida

La sortida són els strings resultants de cridar la funció tree_all_leaves_equal, un resultat per línia. (D’això també s’encarrega 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
    Catalan
    Official solutions
    C++
    User solutions
    C++