Implementar una funció recursiva que, donat un arbre binari d’enters on cada node té 2 fills o és una fulla, substitueixi els nodes intermitjos per la suma dels nodes esquerre i dret i les fulles per 0. El codi ha d’estar correctament documentat amb el Pre, Post, Hipòtesi d’Inducció i Fita.
/* Pre: a és un arbre binari d'enters */ /* Post: el valor de cada node intermig de a se substitueix per la suma del valor del seu fill dret i del fill esquerre. En cas que el node sigui una fulla, el seu valor es posa a 0.*/ void SumNodes(BinaryTree<int> &a);
D’entre els fitxers que s’adjunten a l’exercici també hi ha program.cpp (programa principal) i Makefile per a compilar. Per a pujar la vostra solució, heu de crear el fitxer solution.tar així:
tar cf solution.tar SumNodes.cpp
Entrada
Com a entrada hi haurà un arbre binari on tots els nodes tenen 2 fills o són una fulla. El primer digit és el nombre de nodes i a continuació, per a cada node, apareixen el seu valor i un enter que indica si és una fulla (0) o té dos fills (2), donats en postordre.
Sortida
Com a sortida es mostrarà l’arbre original i, a continuació, l’arbre resultant de la funció recursiva.
Input
5 7 0 2 0 4 2 9 0 3 2
Output
[3]
\__[9]
| \__.
| \__.
\__[4]
\__[2]
| \__.
| \__.
\__[7]
\__.
\__.
[13]
\__[0]
| \__.
| \__.
\__[9]
\__[0]
| \__.
| \__.
\__[0]
\__.
\__.
Input
7 8 0 2 0 4 2 3 0 7 0 5 2 9 2
Output
[9]
\__[5]
| \__[7]
| | \__.
| | \__.
| \__[3]
| \__.
| \__.
\__[4]
\__[2]
| \__.
| \__.
\__[8]
\__.
\__.
[9]
\__[10]
| \__[0]
| | \__.
| | \__.
| \__[0]
| \__.
| \__.
\__[10]
\__[0]
| \__.
| \__.
\__[0]
\__.
\__.