procedure huffman( char cars[*], int occs[*], int n ) returns Arbre a { # On cree les noeuds initiaux pour les feuilles. Arbre noeuds[n]; for [i = 1 to n] { noeuds[i] = new(ArbreRec); noeuds[i]^ = ArbreRec( cars[i], occs[i], null, null ); } # On insere les noeuds/feuilles dans la file de priorite. cap FilePriorite fp = create FilePriorite( n ); fp.insererN( occs, noeuds, n ); # On fusionne, deux a la fois, les noeuds minimaux. for [i = 1 to n-1] { Arbre a1, a2; int p1, p2; fp.retirerMin( p1, a1 ); fp.retirerMin( p2, a2 ); Arbre a = new(ArbreRec); a^ = ArbreRec( '?', p1+p2, a1, a2 ); fp.inserer( p1+p2, a ); } # Le resultat est l'unique noeud restant. int p; fp.retirerMin( p, a ); assert( fp.estVide(), "*** Erreur: file fp pas vide?!?" ); }