Implementeu una funció RECURSIVA que,
donat un arbre binari d’strings amb valors a
i b
als nodes,
retorna un nou arbre amb la mateixa estructura que l’inicial,
i a on per a cada posició p hi ha un valor d’acord al següent criteri
a
que hi ha des de l’arrel fins a aquell
mateix node (ell inclòs).b
que hi ha des de l’arrel fins a aquell
mateix node (ell inclòs)./* Pre: T és un arbre binari que té com a valors els strings "a" o "b". Post: Torna un arbre binari T' isomorf a T (T i T' tenen exactament la mateixa estructura). Per a tot node p de T', si p és fill esquerre del seu pare, llavors p té el nombre de nodes amb \verb#"a"# que hi ha des de l'arrel fins a la mateixa posició a l'arbre T. Per a tot node p de T', si p és fill dret del seu pare, llavors p té el nombre de nodes amb \verb#"b"# que hi ha des de l'arrel fins a la mateixa posició a l'arbre T. L'arrel de T' és sempre 1. */ BinaryTree<int> comptaAB(BinaryTree<string> t);
Aquí tenim un exemple de comportament de la funció:
comptaAB( a(,b(a(a,b),a(a(,b),a))) ) = 1(,1(2(2,2),1(3(,2),1))) a => 1 | | ---- ---- | | b 1 | | ------- ------- ------- ------- | | | | a a 2 1 | | | | ---- ---- ---- ---- ---- ---- ---- ---- | | | | | | | | a b a a 3 2 3 1 | | ---- ---- | | b 2
Fixeu-vos que l’enunciat d’aquest exercici ja ofereix uns fitxers que haureu d’utilitzar per a compilar: Makefile, program.cpp, BinaryTree.hpp, comptaAB.hpp. Només cal que creeu comptaAB.cpp, posant-hi els includes que calguin i implementant la funció comptaAB. I quan pugeu la vostra solució al jutge, només cal que pugeu un tar construït així:
tar cf solution.tar comptaAB.cpp
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 amb valors -1 i -2. 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. En les crides recursives, incloeu la Hipòtesi d’inducció i la funció de fita/decreixement de cada crida recursiva.
Avaluació sobre 10 punts:
Coses que poden restar punts a la puntuació anterior:
Input
INLINEFORMAT a(b(b,a),a(a(a(a,),b(b,a)),)) a(,b(a(a,b),a(a(,b),a)))
Output
1 | ------- ------- | | 1 0 | | ---- ---- ---- | | | 1 1 3 | ---- ---- | | 4 1 | | ---- ---- ---- | | | 5 3 1 1 | ---- | 1 | ------- ------- | | 2 1 | | ---- ---- ---- ---- | | | | 3 2 3 1 | ---- | 2
Input
VISUALFORMAT a | ---- | b | ------- ------- | | a a | | ---- ---- ---- ---- | | | | a b a a | ---- | b b | ---- | a | ----- ----- | | a b | | ---- ------- ------- | | | a a b | | | ---- ---- ---- ---- | | | | b a b a a | ---- | a | ---- ---- | | a a | | ---- ---- | | a a | ---- | a a | ---- | a | ---- ---- | | a b | ---- | a | ---- ---- | | b b a | ---- | a | ---- ---- | | b b | ---- ---- | | b b
Output
1 | ---- | 1 | ------- ------- | | 2 1 | | ---- ---- ---- ---- | | | | 3 2 3 1 | ---- | 2 1 | ---- | 1 | ----- ----- | | 2 2 | | ---- ------- ------- | | | 3 2 3 | | | ---- ---- ---- ---- | | | | 3 1 3 2 1 | ---- | 0 | ---- ---- | | 3 0 | | ---- ---- | | 4 0 | ---- | 5 1 | ---- | 0 | ---- ---- | | 3 1 | ---- | 4 | ---- ---- | | 4 1 1 | ---- | 0 | ---- ---- | | 2 1 | ---- ---- | | 2 2