Implementeu una funció RECURSIVA que, donat un arbre binari d’enters, retorna un altre arbre binari d’enters a base d’esborrar tots els seus 0’s i 1’s aplicant els següents passos tans cops com calgui:
Aquesta és la capcelera:
// Pre: // Post: Retorna el resultat de reemplaçar tans cops com calgui en t // cada subarbre amb arrel 0 pel seu fill esquerre, // i cada subarbre amb arrel 1 pel seu fill dret. BinTree<int> remove01(BinTree<int> t);
Aquí tenim un exemple de paràmetre d’entrada de la funció i la corresponent sortida:
remove01( 0 ) = 7 | | ------------- ------------- ---- | | | 1 8 8 | | ---- ---- ------- ------- | | | | 1 7 1 1 | | | ---- ---- ---- ---- ---- | | | | | 0 8 0 3 0
Fixeu-vos que l’enunciat d’aquest exercici ja ofereix uns fitxers que haureu d’utilitzar per a compilar: main.cc, BinTree.hh, remove01.hh. Us falta crear el fitxer remove01.cc amb els corresponents includes i implementar-hi la funció anterior. Només cal que pugeu remove01.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, la sortida conté la corresponent arbre resultant d’haver esborrat 0s i 1s. 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 0 | ------------- ------------- | | 1 8 | | ---- ---- ------- ------- | | | | 1 7 1 1 | | | ---- ---- ---- ---- ---- | | | | | 0 8 0 3 0 2 | ------- ------- | | 1 6 | | ---- ---- ---- | | | 0 4 3 0 | ---- | 2 | ---- | 7 | ---- | 5 | ---- | 8 0 0 | ---- | 1 5 | ------- ------- | | 0 1 | | ---- ---- ---- | | | 1 5 4 0 | ---- ---- | | 5 4 3 | ------- ------- | | 2 1 | | ----- ----- ---- ---- | | | | 2 1 2 2 | | ---- ------- ------- | | | 0 1 6 | | ---- ---- ---- | | | 8 1 6 1 | ---- ---- | | 7 0 | ---- ---- | | 6 2 | | ---- ---- | | 1 4 6 | ------- ------- | | 1 4 | | ---- ---- ---- | | | 0 0 8 | | | ---- ---- ---- ---- ---- | | | | | 7 0 8 1 1 | ---- ---- | | 5 3
Output
7 | ---- | 8 2 | ---- ---- | | 4 6 | ---- | 3 5 | ---- | 4 5 3 | ---- ---- | | 2 2 | ---- ---- | | 2 6 | ---- | 6 6 | ---- | 4 | ---- | 8 | ---- | 3
Input
INLINEFORMAT -20(1,-3) 1(0(,6),0(,1)) 0(,17(1(7(1,-11),1),20(1(9,-13),0(,5(-3,0))))) 0(-17(,-20),) 0(-14(16(1,1),1(-20(-8,),)),-9(3(0(6,-7),-17(,-5)),18)) 1(-9(-12(,-8),7(1,-16)),-5(-20(-11,-18),)) 18(8(,-17),-10) 0(-19(0(-2,0),-6(,-2)),-11(-4(1,),-11(,17))) 16(-9(,0),-11(1,)) -8(-9,19) -11(,-12) 1 0(-15,9) 3 3(1,-7) 0(3,1(,-1)) 9(-2,8) -7(-4(-15(14,),1(1,1)),) 14(-8(,0),0(,0(-15,))) 0(0(-18,),)
Output
-20(,-3) () () -17(,-20) -14(16,) -5(-20(-11,-18),) 18(8(,-17),-10) -19(-2,-6(,-2)) 16(-9,-11) -8(-9,19) -11(,-12) () -15 3 3(,-7) 3 9(-2,8) -7(-4(-15(14,),),) 14(-8,) -18