Implementeu una funció RECURSIVA que, donat un arbre binari d’enters, retorna un nou arbre amb la mateixa estructura, i a on cada posició conté la suma del valor del propi node més els valors dels nodes dels ancestres d’aquella mateixa posició a l’arbre inicial. Aquesta és la capcelera:
// Pre: // Post: Retorna un arbre d'enters t' amb la mateixa estructura que t. // Per a cada posició p, el valor guardat a t' a posició p és igual a la suma // dels valors guardats a t a posició p i a posicions ancestres de p. BinTree<int> treeOfSumsOfAncestors(const BinTree<int> t);
Aquí tenim un exemple de paràmetre d’entrada de la funció i la corresponent sortida:
treeOfSumsOfAncestors( 7 ) = 7
| |
---- ---- ---- ----
| | | |
2 1 9 8
| |
---- ---- ---- ----
| | | |
5 3 14 12
| |
---- ---- ---- ----
| | | |
4 5 16 17
Fixeu-vos que l’enunciat d’aquest exercici ja ofereix uns fitxers que haureu d’utilitzar per a compilar: main.cc, BinTree.hh, treeOfSumsOfAncestors.hh. Us falta crear el fitxer treeOfSumsOfAncestors.cc amb els corresponents includes i implementar-hi la funció anterior. Només cal que pugeu treeOfSumsOfAncestors.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é el corresponent arbre de sumes d’ancestres. 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ó
Les vostres funcions i subfuncions que creeu han de treballar només amb arbres. Heu de trobar una solució RECURSIVA del problema. Avaluació sobre 10 punts:
Entenem com a solució ràpida una que és correcta, de cost lineal i capaç de superar els jocs de proves públics i privats. Entenem com a solució lenta una que no és ràpida, però és correcta i capaç de superar els jocs de proves públics.
Input
VISUALFORMAT
7
|
---- ----
| |
2 1
|
---- ----
| |
5 3
|
---- ----
| |
4 5
6
|
------- -------
| |
7 8
| |
---- ---- ---- ----
| | | |
8 7 4 6
2
|
---- ----
| |
4 2
| |
---- ---- ----
| | |
7 8 7
| |
---- ---- ----
| | |
5 3 2
|
----
|
7
3
|
------- -------
| |
7 3
| |
---- ---- ---- ----
| | | |
5 1 5 4
7
|
---- ----
| |
3 4
6
|
----
|
5
|
---- ----
| |
7 2
2
4
|
----
|
6
|
---- ----
| |
1 3
4
|
----
|
8
|
------- -------
| |
8 4
| |
---- ---- ----
| | |
1 5 7
4
Output
7
|
---- ----
| |
9 8
|
---- ----
| |
14 12
|
---- ----
| |
16 17
6
|
------- -------
| |
13 14
| |
---- ---- ---- ----
| | | |
21 20 18 20
2
|
---- ----
| |
6 4
| |
---- ---- ----
| | |
13 12 11
| |
---- ---- ----
| | |
18 16 13
|
----
|
20
3
|
------- -------
| |
10 6
| |
---- ---- ---- ----
| | | |
15 11 11 10
7
|
---- ----
| |
10 11
6
|
----
|
11
|
---- ----
| |
18 13
2
4
|
----
|
10
|
---- ----
| |
11 13
4
|
----
|
12
|
------- -------
| |
20 16
| |
---- ---- ----
| | |
21 25 23
4
Input
INLINEFORMAT 7(2(5,3(4,5)),1) 6(7(8,7),8(4,6)) 2(4(7(5,3),),2(8,7(2(7,),))) 3(7(5,1),3(5,4)) 7(3,4) 6(,5(7,2)) 2 4(6(1,3),) 4(,8(8(1,5),4(7,))) 4
Output
7(9(14,12(16,17)),8) 6(13(21,20),14(18,20)) 2(6(13(18,16),),4(12,11(13(20,),))) 3(10(15,11),6(11,10)) 7(10,11) 6(,11(18,13)) 2 4(10(11,13),) 4(,12(20(21,25),16(23,))) 4