Les fulles d’un arbre binari són els nodes que no
tenen ni fill dret ni fill esquerre. Un camí és una
seqüència de nodes d’un arbre A
tal que
és l’arrel
d’,
és una fulla, i per a tot
()
tenim que
és el fill de
.
Un arbre A té tants camins com fulles. La mida d’un camí és
el nombre de nodes de què es composa.
Feu la funció recursiva
int diferenciaMaxima (const arbreBin<int>);
tal que, donat un arbre binari A, torni la diferència
entre la mida del camí més llarg i el més curt d’A.
Per exemple, per a l’arbre A1, tenim els camins
,
i tots tenen mida
.
Per tant, diferenciaMaxima(A1) tornarà
.
L’arbre A2 té els camins
de mides
i
,
i per tant, diferenciaMaxima(A2) tornarà
.
L’arbre A3 té els camins
de mides
,
i
,
i per tant, diferenciaMaxima(A3) tornarà
.
A1 A2 A3
1 1 1
/ \ / \ / \
2 3 2 3 2 3
/ \ / \ / / \
5 6 7 8 7 7 2
La funció rep un arbre binari d’enters A.
La diferència entre la mida del camí més llarg i el més curt
d’A.
Heu d’enviar la solució comprimida en un fitxer .tar:
tar cvf program.tar diferenciaMaxima.cpp
Observeu que per compilar us donem el Makefile,
la capçalera del mòdul funcional
diferenciaMaxima.hpp,
la implementació de l’arbre binari arbreBin.hpp i el
programa principal program.cpp.
Jutge.org també us donarà un semàfor verd si envieu una solució iterativa, però no serà correcte ja que l’enunciat del problema demana que la solució enviada sigui recursiva.
Input
10 10 0 7 1 4 1 8 0 5 1 2 2 9 0 6 1 3 1 1 2
Output
[1]
\__[3]
| \__[6]
| | \__[9]
| | | \__.
| | | \__.
| | \__.
| \__.
\__[2]
\__[5]
| \__[8]
| | \__.
| | \__.
| \__.
\__[4]
\__[7]
| \__[10]
| | \__.
| | \__.
| \__.
\__.
1
Input
6 6 0 4 1 5 0 2 2 3 0 1 2
Output
[1]
\__[3]
| \__.
| \__.
\__[2]
\__[5]
| \__.
| \__.
\__[4]
\__[6]
| \__.
| \__.
\__.
2