Implementa un nou mètode de la classe BinaryTree que
verifica si un arbre binari és equidistant. Un arbre
binari és equidistant si i només si totes les fulles estan a la mateixa
distància de l’arrel.
D’entre els fitxers que s’adjunten en aquest exercici, trobaràs
BinaryTree.old.hpp, a on hi ha una implementació de la
classe genèrica BinaryTree. En primer lloc, hauràs de
fer:
cp BinaryTree.old.hpp BinaryTree.hpp
A continuació si obres el fitxer BinaryTree.hpp al final
del mateix trobaràs el mètode que has d’implementar:
// Pre: cert
// Post: Torna true si el pi és un arbre binari equidistant.
bool es_equidistant() const;
IMPORTANT: No toquis la resta de la implementació de la classe, excepte si necessites afegir algun mètode auxiliar o atribut a la part privada.
D’entre els fitxers que s’adjunten a l’exercici també hi ha
program.cpp (programa principal) i Makefile
per a compilar i generar l’executable. El programa principal que
t’oferim ja s’encarrega de llegir els arbres binaris i fer les crides al
mètode indicat. Només cal que implementis el mètode
es_equidistant.
Per a pujar la teva solució, has de crear el fitxer
solution.tar així:
tar cf solution.tar BinaryTree.hpp
Recorda que si crees funcions auxiliars, has d’afegir-hi les corresponents Precondició (Pre) i Postcondició (Post). En els bucles inclou l’invariant del bucle (Inv) i la funció de fita (FF). En les crides recursives inclou la hipòtesi d’inducció (HI) i la funció de fita (FF).
Una seqüència de parells d’arbres binaris.
Per a cada arbre binari s’escriurà el resultat del mètode
es_equidistant.
El programa principal que t’oferim ja s’encarrega de llegir la
seqüència de parells d’arbres binaris i fer les crides als corresponents
al mètode de BinaryTree que se’t demana d’implementar.
Només cal que facis les modificacions abans esmentades dins el fitxer
BinaryTree.hpp.
Per més detalls de com és l’entrada i la sortida consulta els jocs de proves públics.
Input
1 2 () 0 7(2,5) 5(,1) 5(1,) 5(,1) 5(,1(1,)) 5(,1(,1)) 5(,1(1,)) 4(2(,3),2) 5(1,) 1(3,4(3,2)) 3(1,4(3,2)) 1(3,4(3,2)) 2(5(2,2),) 2(5(2,2 ),6(1,2)) 2(5(2(2(5,),),),)
Output
1 : true 2 : true () : true 0 : true 7(2,5) : true 5(,1) : true 5(1,) : true 5(,1) : true 5(,1(1,)) : true 5(,1(,1)) : true 5(,1(1,)) : true 4(2(,3),2) : false 5(1,) : true 1(3,4(3,2)) : false 3(1,4(3,2)) : false 1(3,4(3,2)) : false 2(5(2,2),) : true 2(5(2,2),) : true () : true 2(5(2(2(5,),),),) : true