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
#
#