Implementeu una funció RECURSIVA que, donat un arbre binari de naturals, retorna un nou arbre que és idèntic a l’inicial, excepte que cada 0 s’ha reemplaçat per la suma dels elements a profunditat parell que apareixen per sobre d’aquest 0 (en l’arbre original), és a dir, les posicións a profunditat parell que són antecessores d’aquest 0.
Sobreentenem que l’arrel de l’arbre està a profunditat 0, els nodes directes des de l’arrel són a profunditat 1, els nodes a distància dos de l’arrel són a profunditat 2, i així successivament. Aquesta és la capcelera:
// Pre: Sigui T el valor inicial de l'arbre t que es rep com a paràmetre. // Els valors guardats a T son majors o iguals a 0. // Post: Sigui T' l'arbre retornat. T i T' tenen exactament la mateixa estructura. // A més a més, per a cada posició p de T', si T té un valor x diferent de 0 a posició p, // llavors T' també té x a posició p. // En canvi, si T té valor 0 a posició p, llavors el valor de T' a posició p és // la suma de tots els valors de T a profunditat parell per sobre de p. BinTree<int> replace0sWithAboveSumDepthEven(BinTree<int> t);
Aquí tenim un exemple de comportament de la funció:
replace0sWithAboveSumDepthEven(3(0(2,8(0,)),1(6(0,8),8(8,4)))) => 3(3(2,8(11,)),1(6(9,8),8(8,4))) 3 => 3 | | ---------- ---------- ---------- ---------- | | | | 0 1 3 1 | | | | ---- ---- ------- ------- ---- ---- ------- ------- | | | | | | | | 2 8 6 8 2 8 6 8 | | | | | | ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- | | | | | | | | | | 0 0 8 8 4 11 9 8 8 4
Fixeu-vos que l’enunciat d’aquest exercici ja ofereix uns fitxers que haureu d’utilitzar per a compilar: main.cc, BinTree.hh, replace0sWithAboveSumDepthEven.hh. Només cal que creeu replace0sWithAboveSumDepthEven.cc, posant-hi els includes que calguin i implementant la funció replace0sWithAboveSumDepthEven. Només cal que pugeu replace0sWithAboveSumDepthEven.cc al jutge.
Entrada
La primera linia de l’entrada descriu el format en el que es descriuen els arbres, o bé INLINEFORMAT o bé VISUALFORMAT. Després venen un nombre arbitrari de casos. Cada cas consisteix en una descripció d’un arbre un arbre binari d’enters. 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.
Sortida
Per a cada cas, cal escriure l’arbre binari resultant de cridar a la funció abans esmentada amb l’arbre d’entrada. 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.
Observació
La vostra funció i subfuncions que creeu han de treballar només amb arbres. Heu de trobar una solució RECURSIVA del problema.
Input
VISUALFORMAT 1 | ---- | 2 | ---- | 6 | ---- ---- | | 6 8 | ---- | 0 9 | ------- ------- | | 6 0 | | ---- ---- ---- | | | 6 0 2 | | ---- ---- ---- ---- | | | | 0 1 0 5 0 | --------- --------- | | 8 0 | | ---- ---- -------- -------- | | | | 1 3 7 0 | | ---- ------- ------- | | | 0 2 2 | | | ---- ---- ---- ---- | | | | 9 3 3 0 2 | ---- ---- | | 0 1 | ------- ------- | | 1 7 | | ---- ---- ---- ---- | | | | 4 4 6 3 0 | ------------------ ------------------ | | 6 8 | | ---- ---- ---- ---- | | | | 5 0 2 3 | | | ------- ------- ---- ---- | | | | 6 5 3 0 | | | ---- ---- ---- ---- ---- ---- | | | | | | 5 9 0 0 0 0 1 | ---- ---- | | 0 9 | ---- ---- | | 2 7 | | ---- ---- | | 3 1 4 | ------- ------- | | 6 7 | | ---- ---- ---- | | | 2 0 0 | | ---- ---- | | 7 0 | | ---- ---- | | 0 0 0 | ------- ------- | | 1 0 | | ---- ---- ---- ---- | | | | 8 3 0 7 | | ---- ---- ---- | | | 3 2 6 4 | ---- | 6 | ---- | 4 | ---- ---- | | 5 8 0 | ------- ------- | | 0 0 | | ---- ---- ---- | | | 0 0 0 | ---- ---- | | 3 1 | | ---- ---- ---- | | | 3 4 6
Output
1 | ---- | 2 | ---- | 6 | ---- ---- | | 6 8 | ---- | 7 9 | ------- ------- | | 6 9 | | ---- ---- ---- | | | 6 9 2 | | ---- ---- ---- ---- | | | | 15 1 11 5 0 | --------- --------- | | 8 0 | | ---- ---- -------- -------- | | | | 1 3 7 0 | | ---- ------- ------- | | | 7 2 2 | | | ---- ---- ---- ---- | | | | 9 3 3 0 2 | ---- ---- | | 2 1 | ------- ------- | | 1 7 | | ---- ---- ---- ---- | | | | 4 4 6 3 0 | ------------------ ------------------ | | 6 8 | | ---- ---- ---- ---- | | | | 5 0 2 3 | | | ------- ------- ---- ---- | | | | 6 5 3 3 | | | ---- ---- ---- ---- ---- ---- | | | | | | 5 9 0 0 2 2 1 | ---- ---- | | 1 9 | ---- ---- | | 2 7 | | ---- ---- | | 3 1 4 | ------- ------- | | 6 7 | | ---- ---- ---- | | | 2 4 4 | | ---- ---- | | 7 4 | | ---- ---- | | 6 4 0 | ------- ------- | | 1 0 | | ---- ---- ---- ---- | | | | 8 3 0 7 | | ---- ---- ---- | | | 3 2 6 4 | ---- | 6 | ---- | 4 | ---- ---- | | 5 8 0 | ------- ------- | | 0 0 | | ---- ---- ---- | | | 0 0 0 | ---- ---- | | 3 1 | | ---- ---- ---- | | | 3 4 6
Input
INLINEFORMAT 1(2(6(6,8(0,)),),) 9(6(,6(0,1)),0(0,2(0,5))) 0(8(1,3),0(7(,0(9,)),0(2(,3),2(3,0)))) 2(0(1(4,4),7(6,3)),1) 0(6(5,0(6(5,9),5(0,0))),8(2(3(0,0),),3(,0))) 1(0,9(2(3,),7(1,))) 4(6(,2(7(0,),)),7(0,0(,0(,0)))) 0(1(8(3,2),3),0(0,7(6,))) 4(,6(4(5,8),)) 0(0(,0),0(0,0(3(3,4),1(,6))))
Output
1(2(6(6,8(7,)),),) 9(6(,6(15,1)),9(9,2(11,5))) 0(8(1,3),0(7(,7(9,)),0(2(,3),2(3,0)))) 2(2(1(4,4),7(6,3)),1) 0(6(5,0(6(5,9),5(0,0))),8(2(3(2,2),),3(,3))) 1(1,9(2(3,),7(1,))) 4(6(,2(7(6,),)),7(4,4(,4(,4)))) 0(1(8(3,2),3),0(0,7(6,))) 4(,6(4(5,8),)) 0(0(,0),0(0,0(3(3,4),1(,6))))