Feu la funció
bool arbre2Acolorit(BinaryTree<int>);
tal que, donat un arbre binari A que només conté
zeros i uns, torni true si i només si l’arbre
està 2-acolorit.
Assumim que el número zero i el número u indiquen dos colors diferents. Diem que un arbre està 2-acolorit si tot node de l’arbre té un color diferent al dels seus fills (si en tingués).
Per exemple, els arbres A1 i A2 estan 2-acolorits,
mentre que A3 no ho està perquè hi ha un node
(marcat amb una fletxa) que té el mateix color que el seu fill.
A1 A2 A3
1 0 0
/ \ / \ / \
0 0 1 1 1 1 <--
/ \ / \ / / / \
1 1 1 1 0 0 1 0
La funció que heu de fer ha de ser al fitxer arbre2Acolorit.cpp.
La puntuació que podeu obtenir és la següent:
Només acceptarem una solució recursiva per a aquest problema.
Quan diem especificació de la funció, H.I. i funció fita volem dir que hi ha de ser tot. Dit altrament: no es donarà una fracció dels 2 punts si doneu només, per exemple, l’especificació de la funció, o només la H.I. i la fita. Se us donarà la bonificació dels 2 punts únicament si feu totes 3 coses correctament.
Entrada
La funció rep un arbre binari d’enters de zeros i uns.
Sortida
Torna un booleà b que és true (false altrament)
si i només si l’arbre està 2-acolorit.
Observació
Heu d’enviar la solució comprimida en un fitxer .tar:
tar cvf program.tar arbre2Acolorit.cpp
Observeu que per compilar us donem el Makefile,
la capçalera del mòdul funcional arbre2Acolorit.hpp,
la implementació de l’arbre binari BinaryTree.hpp,
i el programa principal program.cpp.
Input
INLINEFORMAT 1(0(1(,),1(,)),0(1(,),1(,))) 0(1(,),1(0(,),)) 0(1(0(,),),1(1(,),0(,)))
Output
SI SI NO
Input
VISUALFORMAT
1
|
------- -------
| |
0 0
| |
---- ---- ---- ----
| | | |
1 1 1 1
0
|
---- ----
| |
1 1
|
----
|
0
0
|
---- ----
| |
1 1
| |
---- ---- ----
| | |
0 1 0
Output
SI SI NO