哈夫曼树的构造遇到了一些问题

哈夫曼树的构造中遇到了以下问题,有没有人帮看一下

#include
#include
#define MAX 200

typedef struct htnode
{
    char data;
    int weight;
    int parent, lch, rch;
}htnode, *httree; 

void creattree(htnode *ht, int n)
{
    int lnode, rnode;
    double min1, min2;
    for(int i = 0; i < 2*n-1; i++)
    {
        ht[i].parent = ht[i].lch = ht[i].rch = -1;
    }
    for(int i = n; i < 2*n-1; i++)
    {
        min1 = min2 = 99999;
        lnode = rnode = -1;
        for(int k = 0; k <= i-1; k++)
        {
            if(ht[k].parent == -1)
            {
                if(ht[k].weight < min1)
                {
                    min2 = min1;
                    rnode = lnode;
                    min1 = ht[k].weight;
                    lnode = k;
                }
                else if(ht[k].weight < min2)
                {
                    min2 = ht[k].weight;
                    rnode = k;                    
                }
                            
            }
        }
    ht[i].weight = ht[lnode].weight + ht[rnode].weight;
    ht[lnode].parent = i;
    ht[rnode].parent = i;
    ht[i].lch = lnode;
    ht[i].rch = rnode;    
    }
}


int main(void)
{
    int n;
    htnode h[MAX];
    printf("输入哈夫曼树的结点个数:");
    scanf("%d", &n);
    printf("输入每个结点的权重:");
    for(int i = 0; i < n; i++)
        scanf("%d ", h[i].weight);
    creattree(h, n);
    printf("哈夫曼树的权重排序为:");
    for(int i = n; i < 2*n-1; i++)
        printf("%d ", h[i].weight);    
                
    return 0;
 } 


img

1.在函数 creattree 中,你使用了 double 类型的 min1 和 min2 来保存最小的两个节点的权值。但是,在结构体 htnode 中,你定义的权值是 int 类型的,所以使用 double 类型的 min1 和 min2 可能会导致精度问题。你可以改为使用 int 类型的 min1 和 min2。

2.在读取输入的结点权值时,你使用的是 scanf("%d ", h[i].weight)。这里的空格可能会导致读取不到权值,你可以改为 scanf("%d", &h[i].weight)。

3.在循环中找最小的两个节点时,你没有将 min1 和 min2 初始化为正无穷大。这可能会导致找不到正确的节点。你可以在定义 min1 和 min2 时将其设置为正无穷大,例如:

double min1 = INFINITY, min2 = INFINITY;

另外,我注意到你在主函数中使用了 printf("输入每个结点的权重:"); 语句,但没有提示用户输入权值。你可以在提示用户输入之后,使用 scanf 读取权值。例如:

printf("输入每个结点的权重:");
for (int i = 0; i < n; i++) {
printf("第 %d 个结点的权值:", i + 1);
scanf("%d", &h[i].weight);
}