неверное двоичное дерево - PullRequest
0 голосов
/ 07 августа 2011
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++;
}

Приведенный выше код должен генерировать дерево Хаффмана.Однако сформированное двоичное дерево неверно.Все узлы, которые содержат букву, должны быть листом или узлом без сына, но у некоторых узлов алфавита все еще есть сыновья.Что не так с кодом?

1 Ответ

1 голос
/ 07 августа 2011

malloc возвращает вам область памяти, полную мусора.

Поскольку вы никогда не указали для new_node, что это не алфавитный узел, иногда вы обнаружите там мусор, говорящий, что это на самом деле алфавитный узел.

следствие для проверки: вы должны найти больше узлов алфавита, которые у вас были изначально.

...