Un node dominant en un arbre binari és un node que té un valor que és més gran que qualsevol dels nodes que tenen els seus fills esquerre i dret. Implementa un algorisme recursiu que, donat un arbre binary d’enters, retorni la llista de tots els nodes dominants de l’arbre. NOTA IMPORTANT: les fulles de l’arbre MAI són nodes dominants.
/* Pre: a és un arbre binary d'enters. */
/* Post: Retorna una llista amb tots els nodes dominants de l'arbre
o una llista buida si no n'hi ha cap */
list<int> Dominants(BinaryTree<int> &a) {
}
NOTES IMPORTANTS:
L’algorisme ha de ser eficient, és a dir, que no realitzi càlculs innecessaris.
Entre els fitxers que s’adjunten en aquest exercici trobaràs el fitxer BinaryTree.hpp que conté la implementació de la classe BinaryTree. No cal que modifiquis aquest fitxer.
També trobaràs el fitxer program.cpp i el Makefile per a compilar i generar l’executable. El programa principal ja s’encarrega de llegir les dades de l’arbre i cridar al mètode indicat. Només cal que implementis el mètode Dominants.
Es valorarà la correctesa i eficiència de la solució així com la correcta especificació de la precondició, la postcondició, la hipòtesi d’inducció i la funció fita.
Per a pujar la solució has de crear el fitxer solution.tar
així:
tar cf solution.tar Dominants.cpp
Com a entrada hi haurà els nodes de l’arbre en postordre.
Com a sortida es mostrarà l’arbre original i la llista de nodes dominants.
Input
6 4 0 8 0 5 -1 9 2 3 0 10 2
Output
[10]
\__[3]
| \__.
| \__.
\__[9]
\__[5]
| \__.
| \__[8]
| \__.
| \__.
\__[4]
\__.
\__.
9,10,
Input
3 7 0 2 0 8 2
Output
[8]
\__[2]
| \__.
| \__.
\__[7]
\__.
\__.
8,
Input
3 7 0 2 0 1 2
Output
[1]
\__[2]
| \__.
| \__.
\__[7]
\__.
\__.
Input
2 7 0 1 -1
Output
[1]
\__.
\__[7]
\__.
\__.