哈夫曼树的构造-C语言
来源:互联网 发布:淘宝卫生巾试用报告 编辑:程序博客网 时间:2024/06/06 14:27
#include <stdio.h>#include <stdlib.h>typedef struct{ int weight,parent,lchild,rchild;} HNode;void HuffTree(HNode Huff[],int n){ int i,j,m1,m2,x1,x2; //m1,m2代表的是每次集合中最小的两个权重,x1,x2即为他们的下标. for(i=0; i<2*n-1; i++) { Huff[i].weight=0; Huff[i].parent=-1; Huff[i].lchild=-1; Huff[i].rchild=-1; } printf("Input 1~n value of leaf:\n"); for(i=0; i<n; i++) scanf("%d",&Huff[i].weight); for(i=0; i<n-1; i++) //这里n-1不是很理解 { m1=m2=32767; x1=x2=0; for(j=0; j<n+i; j++) { if(Huff[j].parent==-1 && Huff[j].weight<m1) { m2=m1; x2=x1; m1=Huff[j].weight; x1=j; } else if(Huff[j].parent==-1 && Huff[j].weight<m2) { m2=Huff[j].weight; x2=j; } } Huff[x1].parent=n+i; Huff[x2].parent=n+i; Huff[n+i].weight=Huff[x1].weight+ Huff[x2].weight; Huff[n+i].lchild=x1; Huff[n+i].rchild=x2; } printf("Huff weight lchild rchild parent\n"); for(i=0;i<2*n-1;i++) printf("%3d%5d%10d%10d%10d\n",i, Huff[i].weight,Huff[i].lchild, Huff[i].rchild,Huff[i].parent);}int main(){ HNode Huff[100]={};//空间要足够大,至少要大于2n-1 HuffTree(Huff,4); printf("Hello world!\n"); return 0;}
书上说要进行n-1次合并才能使初始的二叉树最终合并成一棵二叉树,n-1不是很理解,希望那位大神可以解惑。
阅读全文
0 0
- 哈夫曼树的构造-C语言
- ******************** c语言的构造类型 ********************
- [C语言]哈夫曼树(Huffman)的构造与实现
- C语言面向对象的构造
- C语言中构造数据类型的初始化
- c语言构造简单的线性表
- C语言之sprintf()字符串的构造
- C语言中唯一的构造程序
- c语言构造数据类型
- c语言构造函数
- C语言-构造数据类型
- 构造使用类C语言的脚本引擎(4)语法分析
- 构造使用类C语言的脚本引擎(4)
- 任意阶幻方(魔方阵)的C语言构造算法
- C语言中动态数组的构造实例
- 任意阶幻方(魔方阵)的C语言构造算法
- C语言的构造函数与析构函数
- gcc对C语言的扩展:函数参数构造
- Git
- 删除指定日期前的日志文件,对大于一定内存的日志文件重命名且新建日志继续写入
- jsp的九大内置对象以及四大作用域
- 一个div用CSS3做的loading动画
- 深入分析ConcurrentHashMap
- 哈夫曼树的构造-C语言
- SpringMvc拦截器HandlerInterceptorAdapter
- EditText首选输入数字,可以切换输入中文英文
- Python学习08_图像的对比度和亮度
- mysql时间类型格式化
- java中static修饰词的作用
- 杭电 Add More Zero
- 【C++心路历程33】【USACO 2016 February Contest, Bronze Problem 3.】 Load Balancing(加难)
- python 修行之路(一)(购物车练习)