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
[a1, a2, …, ai, ai+1, …, an]
tal que a1 és l’arrel d’A, an és una fulla,
i per a tot ai (i < n) tenim que ai+1 és el fill de ai.
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
[1,2,5],[1,2,6],[1,3,7],[1,3,8], i tots tenen mida 3.
Per tant, diferenciaMaxima(A1)
tornarà 0.
L’arbre A2
té els camins [1,2],[1,3,7] de mides
2 i 3, i per tant, diferenciaMaxima(A2)
tornarà 1.
L’arbre A3
té els camins [1,2],[1,3,7],[1,3,2] de mides
2, 3 i 3, i per tant, diferenciaMaxima(A3)
tornarà 1.
A1 A2 A3 1 1 1 / \ / \ / \ 2 3 2 3 2 3 / \ / \ / / \ 5 6 7 8 7 7 2
Entrada
La funció rep un arbre binari d’enters A
.
Sortida
La diferència entre la mida del camí més llarg i el més curt d’A
.
Observació
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