Boa tarde,
Estou fazendo um trabalho onde preciso usar a codificacao de huffman. porém meu algoritmo de criar arvore esta falhando. Ela monta a arvore sem problemas mas so pela metade... Segue a entrada e saida:
Entrada:
string "abgggaaabbjkliuyyppo".
Saida
(imprimindo em Pre_ordem) em formato (letra, frequencia)
9
b 3
6
y 2
4
u 1
3
l 1
2
j 1
k 1
Ele so cria pela metade! .-.
segue meu algoritmo
struct No{
char letra;
int freq;
struct No *esq, *dir;
};
typedef struct No No;
struct no_vet{
No *nodo;
struct no_vet *proximo;
};
typedef struct no_vet no_vet;
void cria_arvore_huffman(no_vet **forest, No **huf){
No *S0, *S1;
if(*forest != NULL && (*forest)->proximo != NULL){
if((*forest)->nodo != NULL && (*forest)->proximo->nodo != NULL){
S0 = (*forest)->nodo;
if(*huf != NULL) S1 = *huf;
else S1 = (*forest)->proximo->nodo;
*huf = (No*)malloc(sizeof(No));
(*huf)->freq = S0->freq + S1->freq;
(*huf)->esq = S0;
(*huf)->dir = S1;
if((*forest)->proximo->proximo != NULL) cria_arvore_huffman(&(*forest)->proximo->proximo,huf);
}
}
}
Desculpa galera a falta de informacao no post. Pra acrescentar, eu tenho uma lista com chars e suas respectivas frequencias, em ordem crescente. Estou pensando em um novo algoritmo agora e se puderem me ajudar fico grato.