Considereu un arbre binari t de qualsevol tipus. Donat qualsevol subarbre s no buit de t, diem que el grau de desequilibri de s és la diferència entre l’alçada del seu fill esquerre i la del seu fill dret (pot ser positiva, zero o negativa).
Diem que l’arbre de graus de desequilibri de t és un altre arbre binari D amb la mateixa forma que t, on el valor de cada node n és el grau de desequilibri del subarbre de t amb l’arrel a n.
Un exemple, amb l’arbre t a l’esquerra, i l’arbre D de graus de desequilibri a la dreta:
t = 7 D = 2
|-- 1 |-- -1
| |-- # | |-- #
| '-- 8 | '-- 0
'-- 6 '-- -2
|-- 3 |-- -2
| |-- # | |-- #
| '-- 5 | '-- 0
| |-- 2 | |-- 0
| '-- 4 | '-- 0
'-- 10 '-- 0
Implementeu la funció:
/** * @brief Retorna l'arbre de graus de desequilibri de `t`. * * @param t L'arbre binari original. * @returns L'arbre de graus de desequilibri de `t`. */ BinTree<int> bintree_of_height_diffs(BinTree<int> t);
Observació
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 bintree_of_height_diffs 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ó.
Entrada
Cada cas consisteix en una representació textual d’un arbre d’enters. (Aquesta lectura ja la fa el programa principal.)
Sortida
Per a cada cas, la sortida conté la representació textual de l’arbre resultant d’aplicar la funció bintree_of_height_diffs. (La sortida també la fa el programa principal.)
Input
visual
3
5
|-- #
'-- 2
4
|-- 6
'-- 2
3
|-- 4
'-- 2
|-- 1
'-- #
5
|-- 1
| |-- 2
| | |-- #
| | '-- 3
| '-- 4
'-- 6
5
|-- #
'-- 4
|-- #
'-- 3
|-- #
'-- 2
|-- #
'-- 1
Output
0
-1
|-- #
'-- 0
0
|-- 0
'-- 0
-1
|-- 0
'-- 1
|-- 0
'-- #
2
|-- 1
| |-- -1
| | |-- #
| | '-- 0
| '-- 0
'-- 0
-4
|-- #
'-- -3
|-- #
'-- -2
|-- #
'-- -1
|-- #
'-- 0