注册 登录
编程论坛 数据结构与算法

PTA习题 HuffmanTree的创建问题

木偶人丶 发布于 2019-11-20 16:09, 2805 次点击
本题要求实现一个创建哈夫曼树的函数,根据输入的n个结点的权值,创建一棵哈夫曼树。
例如输入5 2 3 5 7 8,其中第一个数值5,表示5个结点,2 3 5 7 8分别表示这5个结点的权值,中间用空格分开,则该函数应该输出5(2,3),10(5,5),15(7,8),25(10,15),注意:生成的结点之间用“,”分开。
程序代码:
#include <stdio.h>
#include <string.h>
#include <malloc.h>

typedef struct
{   
     int weight;         // 结点权值  
     int parent, lc, rc; // 双亲结点和左 右子节点
} HTNode, *HuffmanTree;

void Select(HuffmanTree *HT, int n, int *s1, int *s2)
{   
    int minum,i;      // 定义一个临时变量保存最小值?   
    for(i=1; i<=n; i++)     // 以下是找到第一个最小值   
    {      
         if((*HT)[i].parent == 0)        
   
            {   
                minum = i;            
                 break;        
            }   
     }   
    for(i=1; i<=n; i++)   
         {      
             if((*HT)[i].parent == 0)           
                 if((*HT)[i].weight < (*HT)[minum].weight)               
                     minum = i;   
        }
         
*s1 = minum;    // 以下是找到第二个最小值,且与第一个不同  
  
    for( i=1; i<=n; i++)         
        {      
            if((*HT)[i].parent == 0 && i != *s1)        
                {   
                    minum = i;            
                     break;        
                }   
        }   
    for( i=1; i<=n; i++)   
         {        
                 if((*HT)[i].parent == 0 && i != *s1)           
                      if((*HT)[i].weight < (*HT)[minum].weight)               
                          minum = i;   
        }
           
*s2 = minum;

}
void CreatHuff(HuffmanTree *HT, int *w, int n);
int main()
{   
    HuffmanTree HT;        
    int *w, n, wei,i;   
    //printf("input the number of node\n");   
    scanf("%d", &n);   
    //w = new int[n+1];   
    w=(int *) malloc ((n+1) * sizeof(int));
    //printf("\ninput the %dth node of value\n", n);     
    for(i=1; i<=n; i++)   
    {        
        scanf("%d", &wei);        
        w[i] = wei;    }   
    CreatHuff(&HT, w, n);      
    return 0;
}
/* 请在这里填写答案 */

这是部分代码,所以想请教大佬们下面该怎么做。我在二叉树方面的知识还很欠缺,所以还想请前辈们指教指教,帮助一下
3 回复
#2
木偶人丶2019-11-23 23:44
有人救救这个孩子吗?
#3
林月儿2019-11-24 07:40
怎么救
#4
木偶人丶2019-11-24 10:16
回复 3楼 林月儿
void CreatHuff(Huffmantree &HT,int *w,int n)
{
    int i,m;
    m=2*n-1;
    HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
    for(i=1;i<=n;i++)
        {
             HT[i].weight = w[i-1];
             HT[i].parent = 0;
             HT[i].lc = 0 ;
             HT[i].rc = 0;
        }
    for(;i<=m;++i)
        {
            HT[i].parent=0;
            HT[i].lc = 0;
            HT[i].rc = 0;
        }
    for(i=n+1;i<=m;i++)
    {
        int s1,s2;
        Select(HT,i-1,s1,s2);
        HT[s1].parent = i;
        HT[s2].parent = i;
        HT[i].lc = s1;
        HT[i].rc = s2;
        HT[i].weight=HT[s1].weight+HT[s2].weight;
        printf("%d(%d,%d),", HT[i].weight, HT[s1].weight,HT[s2].weight);
    }
   
}
主,我这样为什么会报错呀
1