Parcourir arbre de huffman

Fermé
Lord Van Messages postés 27 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 16 septembre 2006 - 17 avril 2006 à 17:02
hakimlion Messages postés 1 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 12 avril 2008 - 12 avril 2008 à 16:52
Bonjour à tous,
voilà, je suis en train d'essayer de faire une fonction de parcours d'arbre de huffman. Cette fonction a pour rôle de construire le code de chaque caractère. Sachant que l'arbre a déja été construit préalablement, cette fonction parcourt l'arbre de sa racine jusqu'aux feuilles (qui sont les caractères), quand elle va vers la gauche de l'arbre, elle mets un 1 dans un tableau d'entiers, ou un 0 si elle va à droite. Ce tableau s'incrémente d'une case à l'aide d'un realloc à chaque fois que l'arbre "descend d'un étage". Donc, au final, la fonction de parcours d'arbre, ressort un tab de code de 2 lignes et de 256 colonnes, càd que chaque caractère a un entier qui lui est associé. Cet entier a la particularité d'être composé que de 0 ou de 1. Une fonction externe s'occupera d'écrire cet entier en codage binaire dans un fichier.
Ma fonction arbre utilise une fonction annexe qui a pr but de construire l'entier code. On a besoin de cette fonction car sans elle, code est un tableau donc chaque case a un entier. Mais ce que l'on veut, c'est que chaque entier des cases constitue un seul et unique entier. J'utilise alors un pile de nombre pr reconstituer ce nombre.

Donc j'ai besoin de votre aide pour corriger cette fonction de parcours d'arbre car ça fait 6heures que je suis dessus et je ne trouve pas la solution. Voici mes fonctions :

int Construction_code(int *code, int nb_entier){
int i,k;
pel p=NULL;
int val;
int coef=1;
int res=0;

for(i=0;i<nb_entier;i++){
p=empiler(p,code[i]);
}
while(p!=NULL){
p=depiler(p,&val);
res=res+val*coef;
coef=coef*10;
}
printf("l'entier du code est %i \n", res);
return res;
}



void parcours_arbre (pnoeud arbre, int tab_code[256], int *code,int nb_entier){
int i;
int h=0;
if((arbre->fg=NULL)&&(arbre->fd=NULL)){
tab_code[arbre->c]=Construction_code(code,nb_entier);
nb_entier=0;
}
else
if(arbre->fg){
nb_entier++;
code[nb_entier]=0;
parcours_arbre (arbre->fg, tab_code,realloc(code,sizeof(int)),nb_entier);}
else{
if(arbre->fd){
code[nb_entier]=1;
parcours_arbre (arbre->fd,tab_code,realloc(code,sizeof(int)),nb_entier);
}
}
}


UN grand merci d'avance

1 réponse

hakimlion Messages postés 1 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 12 avril 2008 1
12 avril 2008 à 16:52
je bosion procedur codage et decodage de arbre huffman et calculer la propabiliter de chaque caracter et afficher l' arbre
toute en programme pascal
merci
1