Построение дерева Хаффмана в C. Результатом всегда является только дерево с корнем и двумя его сыновьями - PullRequest
0 голосов
/ 21 октября 2018

Я пытался построить дерево Хаффмана в C с помощью этого алгоритма.

struct node *temp1, *temp2, *new_node;
while (size != 1) {
      temp1 = extractmin(minheap, size);
      size--;
      temp2 = extractmin(minheap, size);
      size--;
      new_node = newnode((temp1->frequency) + (temp2->frequency), '$');
      new_node->lson = temp1;
      new_node->rson = temp2;
      insert(minheap, new_node, size);
      size++;
}
struct node * extractmin(struct node * heap[], int N) {
    struct node *min = heap[1];
    struct node *temp = newnode((heap[N])->frequency, (heap[N])->c);
    heap[1] = temp;
    N = N - 1;
    min_heapify(heap, 1, N);
    return min;
}
void insert(struct node * heap[], struct node * new_node, int N) {
    int i, j;
    N = N + 1;
    i = N;
    j = (i / 2);
    while ((i > 1) && ((heap[j])->frequency > (new_node)->frequency)) {
            heap[i] = heap[j];
            i = j;
            j = i / 2;
    }  
    heap[i] = new_node;
}

Результатом всегда представляется дерево только с корнем и двумя сыновьями.Попытка получить доступ к сыну любого из его сыновей всегда возвращает NULL и вызывает ошибки сегментации.Что я делаю, что приводит к этому?

...