{Définition : un arbre coloré est un arbre dont les noeuds sont également décorés par une couleur. Un arbre bicolore est un arbre coloré qui respecte les contraintes suivantes :
1 il existe 2 couleurs différentes, blanc&gris
2 tous les noeuds fils directs d'un noeud coloré en blanc doivent être colorés en gris
3 toutes les branches(racine->feuille) doivent contenir le même nombre de noeuds colorés en gris
Pas besoin de plus d'info, le reste est "nominatif" ;p}
FUNCTION validation_decore(A:ARBRE):BOOLEAN;
VAR rg_prime:INTEGER;
FUNCTION Aux(A:ARBRE;rg:INTEGER):BOOLEAN;{rg contient le nombre de noeud gris}
VAR ok:BOOLEAN;rg1,rg2:INTEGER;
BEGIN IF a=VIDE THEN BEGIN rg:=0;Aux:=TRUE;END ELSE BEGIN
IF Couleur(A)=BLANC THEN IF ((Droit(A)<>VIDE and Couleur(Droit(A))<>GRIS) OR (Gauche(A)<>VIDE and Couleur(Gauche(A))<>GRIS) THEN Aux:=FALSE ELSE BEGIN
ok:=Aux(Gauche(A),rg1) AND Aux(Droit(A),rg2);
rg1:=1+rg1;rg2:=1+rg2;rg:=rg1;Aux:=(rg1=rg2) AND ok;
END;
END;
END;
BEGIN
validation_decore:=Aux(A,rg_prime);
END;