Implementeu una funció recursiva que, donat un arbre binari d’enters, el retorna ordenat per sumes de subarbres. Ordenar l’arbre implica intercanviar els fills de cada node no buit en el cas en que la suma dels valors dels nodes del fill dret d’aquell node sigui menor estricte que la suma dels valors dels nodes del fill esquerre d’aquell node. Aquesta és la capçalera:
/**
* @brief Retorna l'arbre `t` ordenat per sumes.
*
* @param t L'arbre binari original.
*
* @returns L'arbre resultat d'ordenar `t` per sumes.
*/
BinTree<int> sort_tree(BinTree<int> t);
Els fitxers públics (icona del gatet) són: la classe
BinTree (fitxer bintree.hh), l’entrada/sortida
de BinTree (bintree-io.hh) i el programa
principal. També hi ha un Makefile i el directori
.vscode que té la configuració per compilar i debuggar amb
VSCode.
Has d’implementar sort_tree en un fitxer
.cc nou, compilar (està preparat per poder
compilar i debuggar amb VSCode), i finalment enviar només el
fitxer amb la funció.
La vostra funció i subfuncions que creeu han de treballar només amb arbres. Molt possiblement, una solució recursiva directa serà lenta, i necessitareu crear alguna funció recursiva auxiliar per a produïr una solució més eficient capaç de superar tots els jocs de proves.
Cada cas consisteix en una representació textual d’un arbre binari d’enters. (Aquesta lectura ja la fa el programa principal.)
Per a cada cas, la sortida conté la representació textual de l’arbre
resultant d’aplicar la funció sort_tree. (La sortida també
la fa el programa principal.)
Input
visual
5
|-- #
'-- 7
1
|-- 5
| |-- #
| '-- 9
'-- 7
|-- 2
'-- #
1
|-- 10
| |-- #
| '-- 2
| |-- 2
| '-- #
'-- #
Output
5
|-- #
'-- 7
1
|-- 7
| |-- #
| '-- 2
'-- 5
|-- #
'-- 9
1
|-- #
'-- 10
|-- #
'-- 2
|-- #
'-- 2