Implementeu la funció següent:
/** * @brief Poda les branques amb valor `x` d'un arbre binari. * * Retorna un nou arbre binari que és una còpia de `t` * però sense les branques que contenen el valor `x`. * Alhora retorna si la poda ha tingut èxit o no s'ha podat res. * * @param t Arbre binari. * @param x Valor de les branques a podar. * * @return Retorna una parella (`std::pair`) amb l'arbre podat * i un booleà que és `true` si s'ha podat alguna branca * i `false` si l'arbre resultat és igual que `t`. */ std::pair<pro2::BinTree<int>, bool> prune_tree(pro2::BinTree<int> t, int x);
Observació
Els fitxers públics (icona del gatet) contenen:
bintree.hh | la classe BinTree |
bintree-io.hh | l’entrada/sortida de BinTree |
prune.hh | declaració de prune_tree |
main.cc | el programa principal |
També hi ha un Makefile
i el directori .vscode
que té la configuració per compilar i depurar amb VSCode.
Cal implementar evaluate
en un fitxer .cc
nou, compilar, i finalment enviar només el fitxer amb la funció.
Entrada
Cada cas consisteix en una representació textual d’un arbre d’enters (t
) seguit d’un enter, que és el valor a podar (x
). (Això ja ho fa el main
que es dóna.)
Sortida
Per a cada cas, la sortida és l’arbre resultant de la poda, cada resultat en una línia separada. Si no s’ha podat res, s’escriu un missatge "No s’ha trobat x
", amb el valor concret d’x
. (Això també ho fa el main
que es dóna.)
Input
3 |-- 4 '-- 4 |-- 1 '-- # 4 2 |-- 3 | |-- 5 | '-- 3 '-- 1 |-- 3 '-- # 5 2 |-- 1 | |-- # | '-- 4 '-- 4 |-- 4 '-- # 4
Output
3 2 |-- 3 | |-- # | '-- 3 '-- 1 |-- 3 '-- # 2 |-- 1 '-- #
Input
1 |-- 4 | |-- 1 | '-- 2 '-- 5 |-- 4 '-- 1 5 4 |-- 5 | |-- 3 | '-- 2 '-- 1 |-- 3 '-- 5 6 1 |-- 3 | |-- 5 | '-- 4 '-- 3 |-- 1 '-- 2 5 5 |-- 1 | |-- 3 | '-- 2 '-- 1 |-- 3 '-- 5 5 2 2
Output
1 |-- 4 | |-- 1 | '-- 2 '-- # No s'ha trobat 6 1 |-- 3 | |-- # | '-- 4 '-- 3 |-- 1 '-- 2 # #