Bonjour tout le monde !
La fin de l'année arrive et avec elle vient la fin des
projets...généralement inachevés. En ce moment je travail sur la
compression d'huffman et donc les arbres binaires. Disons que j'ai un
petit probleme tout con que je n'arrive pas a résoudre. Je ne pense pas
que le probleme vienne de ma fonction et dans ce cas je voudrais savoir
pourquoi windows réagit stupidement.
Bon un arbre grosso modo c'est ca :

Bon, si on dit par exemple qu'a un noeud, la branche qui part vers la
gauche portera le numéro 1 et celle vers la droite le numéro 0 et qu'a
chaque étage on concatène le nom ca donne un truc du genre :
e = "0"
a = "11"
i = "101"
o = "100"
Et mon probleme vient de la fonction qui, une fois l'arbre créer passe dedans pour associé un code de 0 et de 1 a chaque lettre.
Voici la fonction :
char * ajouter_lettre(char * str,char car)
{
char * str_temp;
str_temp = malloc((1+strlen(str))*sizeof(char));
int i;
for(i=0;i<strlen(str);i++)
*(str_temp+i) = *(str+i);
*(str_temp+strlen(str)) = car;
//printf("%s",str_temp);
return str_temp;
}
void creer_tab(arbre temp_tree,char * tab[256],char * str_temp)
{
if(temp_tree -> lettre == -1) {
creer_tab((*temp_tree).g,tab,ajouter_lettre(str_temp,'0'));
creer_tab((*temp_tree).d,tab,ajouter_lettre(str_temp,'1'));
}
else
{
//Etant donné que ca marche pas, j'affiche le résultat pour voir les
dégats...
//tab[temp_tree -> lettre] = malloc(strlen(str_temp)*sizeof(char));
//tab[temp_tree -> lettre] = str_temp;
printf("%c : %s\n",(char)(temp_tree -> lettre),str_temp);
}
}
et le typage des arbres :
typedef struct noeud {
int lettre; //lettre associe au noeud
int f; //frequence d'apparition de la lettre
struct noeud * g; //le fils de gauche
struct noeud * d; //le fils de droite
} noeud, * arbre;
Et donc voici ce que m'affiche ma fonction creer_tab :

On obtient bien une séie de 1 et de 0 pour chaque lettre, mais y'a des
caractères qui se sont invités et moi j'aime pas trop mdr ^^
QQun saurait pourquoi cela fait ca ?




