Feu la funció recursiva
bool subArbre (arbreBin<int> A, arbreBin<int> B);
tal que, donades dos arbres binaris d’enters positius,
retorni true
(false
altrament) si el segon arbre és un
subarbre del primer arbre.
Un arbre B
és un subarbre d’un arbre A
si existeix un node d’A
a partir del qual
puguem superposar-hi l’arbre B
de manera que coincideixin
tots els valors dels nodes de l’arbre B
amb els valors
de l’arbre A
.
Tingueu en compte que si bé tot l’arbre B
ha d’aparèixer
a A
, a l’inrevés no cal que passi.
Per exemple, A2
és un subarbre d’A1
i d’A3
,
però A3
no és subarbre d’A1
.
A1 A2 A3 1 1 1 / \ / \ / \ 2 3 2 3 2 3 / \ / \ / / \ 5 6 7 8 7 7 2
Entrada
La funció rep dos arbres binaris d’enters positius.
Sortida
true
(false
altrament) si el segon arbre és un
subarbre de la primer arbre.
Observació
Heu d’enviar la solució comprimida en un fitxer .tar:
tar cvf program.tar subArbre.cpp
Observeu que per compilar us donem el Makefile
,
la capçalera del mòdul funcional subArbre.hpp
,
la implementació de l’arbre binar 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
9 9 0 2 1 5 0 7 0 4 2 3 2 8 0 6 1 3 2 4 5 0 7 0 4 2 3 1
Output
[3] \__[6] | \__[8] | | \__. | | \__. | \__. \__[3] \__[4] | \__[7] | | \__. | | \__. | \__[5] | \__. | \__. \__[2] \__[9] | \__. | \__. \__. [3] \__[4] | \__[7] | | \__. | | \__. | \__[5] | \__. | \__. \__. sí
Input
9 9 0 2 1 5 0 7 0 4 2 3 2 8 0 6 1 3 2 4 5 0 7 0 4 2 4 1
Output
[3] \__[6] | \__[8] | | \__. | | \__. | \__. \__[3] \__[4] | \__[7] | | \__. | | \__. | \__[5] | \__. | \__. \__[2] \__[9] | \__. | \__. \__. [4] \__[4] | \__[7] | | \__. | | \__. | \__[5] | \__. | \__. \__. no