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