Camí més llarg en un arbre binari V22704


Statement
 

pdf   zip   tar

thehtml

Implementeu una funció recursiva que, donat un arbre binari d’enters, retorni la llista de valors que es troben des de l’arrel seguint el camí més llarg de l’arbre. En cas que hi hagi varis camins màxims, s’haurà d’escollir el camí que va el més a l’esquerra possible. Aquesta és la capcelera:

/**
 * @brief Retorna els valors del camí més llarg d'un arbre binari.
 *
 * Un camí va des de l'arrel de l'arbre fins a una fulla (un node sense fills).
 * Si hi ha més d'un camí màxim, cal retornar el que va per les branques de més
 * a l'esquerra possible.
 *
 * @param t L'arbre binari.
 * @returns Els valors dels nodes del camí més llarg de `t`.
 */
vector<int> longest_leftmost_path(BinTree<int> t);

Un exemple d’arbre i la seva sortida corresponent seria:

longest_leftmost_path( 3            ) => [3,3,2,1]
                       |-- 1        
                       |   |-- #    
                       |   '-- 5    
                       '-- 3        
                           |-- 2    
                           |   |-- 1
                           |   '-- 7
                           '-- #    

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

bintree.hhla classe BinTree
bintree-io.hhl’entrada/sortida de BinTree
bintree-inline.hhl’e/s en format "inline"
vector-io.hhla fució print_vector
main.ccel programa principal

També hi ha un Makefile i el directori .vscode que té la configuració per compilar i debuggar amb VSCode.

Cal implementar longest_leftmost_path en un fitxer .cc nou, compilar (està preparat per poder compilar i debuggar amb VSCode), i finalment enviar només el fitxer amb la funció.

Entrada

La primera linia de l’entrada descriu el format en el que es descriuen els arbres, "inline" o "visual". Després venen un nombre arbitrari de casos. Cada cas consisteix en una descripció d’un arbre un arbre binari d’enters.

Sortida

Per a cada cas, la sortida conté el corresponent camí més llarg i més a l’esquerra de l’arbre, en un format del que ja s’encarrega el programa principal.

Observació

La vostra funció i subfuncions que creeu han de treballar només amb arbres. Heu de trobar una solució recursiva del problema.

Us aconsellem fer aquest problema en dues fases: 1) fer una solució correcta malgrat no sigui eficient; i 2) buscar una solució més eficient utilitzant immersió.

Public test cases
  • Input

    visual
    7
    |-- 1
    '-- 2
        |-- 3
        |   |-- 5
        |   '-- 4
        '-- 5
    
    6
    |-- 7
    |   |-- 8
    |   '-- 7
    '-- 8
        |-- 4
        '-- 6
    
    2
    |-- 2
    |   |-- 7
    |   |   |-- #
    |   |   '-- 2
    |   |       |-- #
    |   |       '-- 7
    |   '-- 8
    '-- 4
        |-- #
        '-- 7
            |-- 3
            '-- 5
    
    3
    |-- 3
    |   |-- 4
    |   '-- 5
    '-- 7
        |-- 1
        '-- 5
    
    7
    |-- 4
    '-- 3
    
    6
    |-- 5
    |   |-- 2
    |   '-- 7
    '-- #
    
    2
    
    4
    |-- #
    '-- 6
        |-- 3
        '-- 1
    
    4
    |-- 8
    |   |-- 4
    |   |   |-- #
    |   |   '-- 7
    |   '-- 8
    |       |-- 5
    |       '-- 1
    '-- #
    
    4
    
    

    Output

    [7,2,3,5]
    [6,7,8]
    [2,2,7,2,7]
    [3,3,4]
    [7,4]
    [6,5,2]
    [2]
    [4,6,3]
    [4,8,4,7]
    [4]
    
  • Information
    Author
    PRO2
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++