Un arbre binari és un arbre d’aritat 2. Una fulla d’un arbre és un node que no té cap fill. La profunditat d’una fulla és el nombre d’arestes que hi ha entre l’arrel de l’arbre i la fulla. Un arbre binari complet és un arbre binari que té les següents propietats:
La diferència entre la fulla més profunda i la fulla menys profunda és, com a màxim, .
Les fulles de l’últim nivell són totes el més a l’esquerra possible.
Per exemple,
A1 A2 A3
1 1 3
/ \ / \ / \
2 3 5 3 2 5
/ \ / / / / \
5 4 6 4 1 1 4
tenim que l’arbre A1 és un arbre complet, ja que
compleix la condició (1) ja que totes les fulles tenen la mateixa
profunditat, i també la (2) ja que totes les fulles del nivell més
profund són totes a l’esquerra.
En canvi, l’arbre A2 no és complet perquè si bé compleix
la condició (1) perquè totes dues fulles
(
i
)
tenen la mateixa profunditat, no compleix la condició (2), ja que el
node
no és tan a l’esquerra com podria (hauria de ser el fill dret de
).
L’arbre A3 és complet perquè compleix la condició (1) ja
que diferència entre la profunditat de la fulla
(la menys profunda) i la de les fulles
o
és
,
i també compleix la condició
,
ja que les fulles del nivell més profund són totes dues a
l’esquerra.
Feu la funció
bool arbreBinariComplet (arbreBin<int>);
tal que, donat un arbre binari d’enters, torni un booleà que sigui cert si i només si l’arbre és un arbre binari complet.
Per a A1 tornaria true, per a
A2 tornaria false i per a A3
tornaria true.
La funció rep un arbres binari d’enters A.
true si i només si A és un arbre binari
complet.
Heu d’enviar la solució comprimida en un fitxer .tar:
tar cvf program.tar arbreBinariComplet.cpp
Observeu que per compilar us donem el Makefile,
la capçalera del mòdul funcional
arbreBinariComplet.hpp,
la implementació de l’arbre binari arbreBin.hpp i el
programa principal program.cpp.
Input
6 2 0 4 0 3 2 6 0 8 -1 5 2
Output
[5]
\__[8]
| \__.
| \__[6]
| \__.
| \__.
\__[3]
\__[4]
| \__.
| \__.
\__[2]
\__.
\__.
SÍ
Input
6 2 0 4 0 3 2 9 0 8 1 5 2
Output
[5]
\__[8]
| \__[9]
| | \__.
| | \__.
| \__.
\__[3]
\__[4]
| \__.
| \__.
\__[2]
\__.
\__.
NO