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