标题:HuffmanTree的创建问题
取消只看楼主
木偶人丶
Rank: 2
等 级:论坛游民
帖 子:36
专家分:16
注 册:2017-3-3
结帖率:88.89%
 问题点数:0 回复次数:0 
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;
}
/*填写代码区*/

求大佬们帮忙,二叉树这里我理解的还够多,所以请指教一下
搜索更多相关主题的帖子: int for parent 结点 创建 
2019-11-20 15:56



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




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

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