首页 > 解决方案 > 用 C 构建一棵 Huffman 树。结果总是只有一棵树,有根和它的两个儿子

问题描述

我一直在尝试用这个算法在 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 并导致分段错误。我在做什么结果呢?

标签: pointershuffman-code

解决方案


推荐阅读