Implementeu una funció RECURSIVA que,
donats tres arbres binaris amb la mateixa estructura, dos d’enters
positius i un de caràcters d’operacions aritmètiques; obté un nou arbre
amb la mateixa estructura que conté, per a cada posició, el resultat
d’avaluar els valors dels nodes t1 i
t2 amb l’operador del node
to, tots tres en la mateixa posició. Aquesta
és la capcelera:
// Pre: Rep dos arbres binaris d'enters positius {\tt t1} i {\tt t2} i un de caràcters {\tt to} amb la mateixa estructura.
// Post: Retorna un arbre amb la mateixa estructura, on a cada node hi ha el resultat d'avaluar els valors dels nodes {\tt t1} i {\tt t2} amb l'operador de {\tt to}, tots tres en aquella posició.
BinaryTree<int> mixOfTrees(BinaryTree<int> t1,BinaryTree<int> t2, BinaryTree<char> to);
Aquí tenim un exemple d’entrada de la funció i la seva corresponent sortida:
6(7(5,3),5(6,2))
9(1(2,7),0(9,3))
*(*(+,+),-(*,+))
=>
54(7(7,10),5(54,5))
Fixeu-vos que l’enunciat d’aquest exercici ja ofereix uns fitxers que
haureu d’utilitzar per a compilar: Makefile,
program.cpp,
BinaryTree.hpp,
mixOfTrees.hpp. Només cal que creeu
mixOfTrees.cpp, posant-hi els includes que
calguin i implementant la funció mixOfTrees. I
quan pugeu la vostra solució al jutge, només cal que pugeu un tar
construït així:
tar cf solution.tar mixOfTrees.cpp
L’entrada té un nombre arbitrari de casos. Cada cas consisteix en tres línies. En cadascun d’aquests, les dues primeres línies tenen un string que descriu un arbre binari d’enters positius i la tercera un arbre binari de caràcters. Fixeu-vos en que el programa que us oferim ja s’encarrega de llegir aquestes entrades. Només cal que implementeu la funció abans esmentada.
Per a cada cas, cal retornar l’arbre binari resultant d’avaluar els
valors dels nodes t1 i
t2 amb l’operador del node
to, tots tres en la mateixa posició. Tots els
resultats han de ser nombres enters positius, es a dir, no poden haver
nombres negatius. Fixeu-vos en que el programa que us oferim ja
s’encarrega d’escriure aquesta sortida. Només cal que implementeu la
funció abans esmentada.
Input
6(3(,2(2(9,0(,6)),7)),0(7(2,9),6(9,9))) 5(1(,6(0(2,3(,6)),0)),1(6(3,0),5(4,8))) +(*(,*(+(-,*(,+)),+)),+(-(-,+),+(+,-))) 4(0,9(6(5,),8(7(2(,1),1(4,9)),7(5(7,3),6(4,2))))) 8(4,8(9(5,),1(1(6(,5),8(3,6)),9(0(5,8),8(0,9))))) -(-,+(+(-,),+(-(-(,*),-(-,-)),-(+(+,*),*(+,-))))) 3(3(9,3),8(4,8(7(,3(0,)),5))) 5(7(7,4),2(2,9(6(,4(9,)),5))) -(-(+,-),*(*,-(-(,*(-,)),*))) 8(,6(,2(6(,4),4(,2)))) 0(,1(,1(3(,1),8(,0)))) +(,-(,-(-(,-),*(,-)))) 3(,5(4(,4),6(6,7))) 7(,2(0(,6),9(9,2))) -(,-(-(,-),+(-,+))) 9(7,7(,8)) 1(6,9(,2)) -(*,*(,*)) 2(2(8(,0),9(,5)),9(6(0,),4(1,3))) 9(8(8(,2),1(,4)),6(2(2,),4(9,6))) *(-(*(,+),*(,-)),-(+(-,),*(*,*))) 7(3(7,6),6(7,0)) 6(8(0,7),8(4,0)) -(*(-,-),-(-,*)) 1(9(4,5),9(5,5)) 2(8(7,9),9(1,8)) *(-(+,*),+(-,-)) 2(3(9(6,),4(,4)),) 0(6(2(8,),5(,8)),) -(*(-(*,),*(,*)),) 1(3(2(5,2(9,5)),3),) 0(6(7(6,4(0,6)),8),) -(-(+(-,-(-,-)),-),) 3(3(7(9(8,),8),7(8(7,),3)),3(2,2)) 0(4(0(7(1,),1),1(7(1,),4)),7(1,5)) *(-(-(+(*,),+),*(*(-,),+)),*(-,+)) 3(7(1,),6(,5)) 1(4(5,),1(,4)) +(+(+,),-(,-)) 2(0(6,3(4(7,8),2(6,))),1(3,1)) 5(3(1,1(4(0,8),0(5,))),3(6,7)) +(+(-,-(+(-,-),*(-,))),+(-,-)) 6(0(0(2,),9(4,4)),2) 2(9(4(3,),0(0,7)),3) -(*(*(+,),*(-,*)),-) 2(8(2(,5(5,6)),1(3(8,0),4)),6(2(9,6),)) 1(7(3(,7(7,6)),9(8(4,1),3)),9(8(0,9),)) -(-(+(,+(-,-)),+(-(-,+),*)),+(-(-,*),)) 5(2,2(6,)) 2(9,5(8,)) -(*,-(-,)) 7(,1(0(5,),)) 4(,3(0(0,),)) +(,-(*(*,),)) 0(,8(8(0,),5(7,2))) 1(,1(9(6,),7(7,7))) *(,-(+(*,),-(*,-))) 2(7(6(1(8,6(8,8)),),7(4(5,2(1,9)),9(4(2,2),2(4,6)))),0) 0(2(1(3(1,7(9,1)),),5(2(0,1(0,6)),7(0(1,8),9(7,7)))),2) -(+(-(+(-,-(-,+)),),*(+(+,*(*,-)),*(-(-,+),*(+,-)))),*)
Output
11(3(,12(2(7,0(,12)),7)),1(1(1,9),11(13,1))) 4(4,17(15(0,),9(6(4(,5),7(1,3)),2(5(12,24),48(4,7))))) 2(4(16,1),16(8,1(1(,12(9,)),25))) 8(,5(,1(3(,3),32(,2)))) 4(,3(4(,2),15(3,9))) 8(42,63(,16)) 18(6(64(,2),9(,1)),3(8(2,),16(9,18))) 1(24(7,1),2(3,0)) 2(1(11,45),18(4,3)) 2(18(7(48,),20(,32)),) 1(3(9(1,2(9,1)),5),) 0(1(7(16(8,),9),7(56(6,),7)),21(1,7)) 4(11(6,),5(,1)) 7(3(5,2(8(7,0),0(1,))),4(3,6)) 4(0(0(5,),0(4,28)),1) 1(1(5(,12(2,0)),10(5(4,1),12)),15(6(9,54),)) 3(18,3(2,)) 11(,2(0(0,),)) 0(,7(17(0,),2(49,5))) 2(9(5(4(7,1(1,9)),),35(6(5,2(0,3)),63(4(1,10),18(11,1)))),0)
Input
6(3(2,2),) 0(6(3,9),) -(+(+,*),) 0(7(2(,9),6),9(9,8)) 2(3(6(,0),1),6(3,0)) -(+(+(,+),-),-(-,*)) 4(5(4(0,),6(,4)),4(0,9(,6))) 2(7(2(7,),1(,7)),8(4,0(,5))) -(-(+(+,),-(,-)),-(*,-(,*))) 1(9,6) 6(5,6) *(-,-) 2(9,8) 3(6,9) -(+,+) 9(,8(3,4(,7))) 6(,9(5,7(,1))) +(,-(+,-(,+))) 5(5(8,8(4,3)),0) 4(6(7,7(9,8)),8) -(-(*,+(+,+)),-) 6(2,7(,8(8,6))) 1(1,5(,0(1,2))) *(+,*(,*(-,*))) 8(2,) 2(6,) -(-,) 8(1(3,3),9(3,)) 0(4(6,6),5(0,)) +(+(-,+),*(*,))
Output
6(9(5,18),) 2(10(8(,9),5),3(6,0)) 2(2(6(7,),5(,3)),4(0,9(,30))) 6(4,0) 1(15,17) 15(,1(8,3(,8))) 1(1(56,15(13,11)),8) 6(3,35(,0(7,12))) 6(4,) 8(5(3,9),45(0,))