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;
| |
|