标题:PTA习题 HuffmanTree的创建问题
只看楼主
木偶人丶
Rank: 2
等 级:论坛游民
帖 子:36
专家分:16
注 册:2017-3-3
结帖率:88.89%
已结贴  问题点数:20 回复次数:3 
PTA习题 HuffmanTree的创建问题
本题要求实现一个创建哈夫曼树的函数,根据输入的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;
}
/* 请在这里填写答案 */

这是部分代码,所以想请教大佬们下面该怎么做。我在二叉树方面的知识还很欠缺,所以还想请前辈们指教指教,帮助一下
搜索更多相关主题的帖子: i++ parent 结点 for int 
2019-11-20 16:09
木偶人丶
Rank: 2
等 级:论坛游民
帖 子:36
专家分:16
注 册:2017-3-3
得分:0 
有人救救这个孩子吗?
2019-11-23 23:44
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:20 
怎么救

剑栈风樯各苦辛,别时冰雪到时春
2019-11-24 07:40
木偶人丶
Rank: 2
等 级:论坛游民
帖 子:36
专家分:16
注 册:2017-3-3
得分:0 
回复 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);
    }
   
}
主,我这样为什么会报错呀
2019-11-24 10:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497955-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.221273 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved