Arbre binari amb totes les fulles iguals T82960


Statement
 

pdf   zip   tar

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.cc el programa principal, amb la entrada/sortida feta
bintree.hh la classe BinTree<T>
bintree-io.hh l’entrada/sortida de BinTree<T>
bintree-inline.hh l’entrada/sortida "inline" de BinTree<T>
Makefile per compilar amb make còmodament
.vscode carpeta 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

Per a cada arbre, la sortida és true si totes les fulles tenen el mateix valor, o false altrament. (D’això 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
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++