Я пытался построить дерево Хаффмана в 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 и вызывает ошибки сегментации.Что я делаю, что приводит к этому?