2011-08-07 4 views
-1
while(count != 25) { 
    tail = head; 
    new_node = (binary_node*)malloc(sizeof(binary_node)); 
    while(tail->next != NULL) 
     tail = tail->next; 
    tail->next = new_node; 
    new_node->element.frequency = (p->element.frequency + q->element.frequency); 
    new_node->LSON = p; 
    new_node->LSON->RTAG = 0; 
    new_node->RSON = q; 
    new_node->RSON->RTAG = 1; 
    head = new_node; 
    n = n - 1; 
    head = q->next; 
    sort(n, head); 


    p = head; 
    q = p->next; 
    count++; 
} 

Le code ci-dessus devrait générer un arbre de Huffman. Cependant, l'arbre binaire formé est incorrect. Tous les nœuds qui contiennent une lettre doivent être une feuille ou un nœud sans fils mais certains nœuds d'alphabet ont encore des fils. Quel est le problème avec le code?arbre binaire incorrect

+1

est ce devoir? – erisco

+0

non. J'essaie seulement de créer un arbre de Huffman en ce moment parce que je ne peux pas le faire en classe. – shinshin32

+7

Je ne vois pas une seule déclaration de variable, ni aucun commentaire. Bien que je puisse deviner certains types et significations, le débogage par ESP n'est pas amusant. Veuillez afficher un code plus complet et ajouter des commentaires pertinents. – abelenky

Répondre

1

malloc vous renvoie une zone de mémoire pleine d'ordures.

Puisque vous ne définissez jamais pour le nouveau_node que ce n'est pas un nœud alphabétique, vous trouverez parfois un garabage disant qu'il s'agit en fait d'un nœud alphabétique.

conséquence pour la vérification: vous devriez trouver plus de nœuds alphabétiques que vous aviez à l'origine.

+0

J'ai essayé de définir un caractère pour new_node afin qu'il ne devienne pas un nœud alphabétique. mais c'est toujours pareil. il y a encore un nœud qui semble être un nœud de l'alphabet, mais a un fils droit et gauche – shinshin32