fonction code (ref racine: arbreptr): entier;
var i:entier;
var somme:entier;
debut /* code parmi ceux de la meme taille*/
si racine = null alors retourne 0 finsi;
/* compter ceux de la meme taille mais avec un sous-arbre gauche
plus petit*/
somme:=0;
pour i allant de 0 a taille(racine^.gauche)-1 par pas de 1 faire
somme := somme+T[i]*T[taille(racine)-1-i]
finpour;
/*et enfin ceux avec les memes tailles des deux sous-arbres mais qui
precedent "racine" dans l'ordre*/
somme := somme+code(racine^.gauche)*T[taille(racine^.droite)];
retourne somme+code(racine^.d)
fin
finfonction;
fonction decode(val n,c: entier): arbreptr;
/* n la taille, c le code*/
var racine: arbreptr;
var i: entier;
debut
i:=-1;
si n=0 alors retourne null finsi;
allouer(racine);
tantque c>=0 faire i:=i+1;c:=c-T[i]*T[n-1-i] fin tantque;
c:=c+T[i]*T[n-1-i]; /*i est la taille du sous-arbre gauche*/
racine^.gauche:=decode(i,c/T[n-1-i]);
racine^.droite=decode(n-1-i,c mod T[n-1-i]);
retourne racine
fin
finfonction;
|
|
|