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ó numLeftRight. 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 funció de fita/decreixement.
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