博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

哈夫曼树建立

Posted on 2012-11-22 10:47  皇星客栈--Linux  阅读(195)  评论(0编辑  收藏  举报
View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<iostream>
 4 #define MAXVALUE 100                //定义最大权值
 5 #define MAXLEAF 50                  //定义哈夫曼树中叶子节点个数
 6 #define MAXNODE MAXLEAF*2-1
 7 
 8 typedef struct{
 9     int weight;
10     int parent;
11     int lchild;
12     int rchild;
13     }HNodeType;
14     
15 static int n; 
16 
17 HNodeType HuffNode[MAXNODE];
18 HNodeType *HaffmanTree( ){
19     int i,j,m1,m2,x1,x2;
20     scanf("%d",&n);                     //输入叶子节点个数
21     for(i=0;i<2*n-1;i++)          //数组HuffNode[ ]初始化
22     {
23         HuffNode[i].weight=0;
24         HuffNode[i].parent=-1;
25         HuffNode[i].lchild=-1;
26         HuffNode[i].rchild=-1;
27     }
28     for(i=0;i<n;i++)
29             scanf("%d", &( HuffNode[i].weight));
30     for(i = 0 ; i < n - 1 ; i++ ) {
31      m1=m2=MAXVALUE;
32      x1 = x2 = 0;
33      for( j=0 ; j < n + i ; j++ )  
34      {
35          if(HuffNode[j].parent == -1 && HuffNode[j].weight < m1)
36          {   
37              m2 = m1;
38              x2 = x1;
39              m1 = HuffNode[j].weight;
40              x1 = j;
41          }
42          else
43             if(HuffNode[j].parent == -1 && HuffNode[j].weight < m2 ){
44                m2 = HuffNode[j].weight;                                                                            
45                x2 = j;
46             }
47     }
48     HuffNode[x1].parent = n + i;
49     HuffNode[x2].parent = n + i;
50     HuffNode[n+i].weight = HuffNode[x1].weight + HuffNode[x2].weight;
51     HuffNode[n+i].lchild = x1;
52     HuffNode[n+i].rchild = x2;
53   }
54   return HuffNode;
55 }
56 
57 int main( )
58 {
59      HaffmanTree( );
60      for(int i=0; i < 2*n-1 ; i++)
61      {
62          printf("%d ",HuffNode[i].weight);
63          printf("%d ",HuffNode[i].lchild);
64          printf("%d ",HuffNode[i].rchild);
65          printf("%d",HuffNode[i].parent);
66          printf("\n");
67      }
68      return 0;
69 }
70     
71     
72