代码:

#include<stdio.h>
#define ERROR 0
#define OK 1
typedef int Status;
//采用顺序存储结构,一维结构数组
//定义结点类型
typedef struct
{int weight;int parent,lch,rch;
}HTNode,*HaffmanTree;
HaffmanTree HT;
//哈夫曼树的构造算法
Status CreatHT(HaffmanTree HT,int n)
{int s1,s2;if(n<=1)return ERROR;int m=2*n-1;//数组共2*n-1个元素 int i;HT=new HTNode[m+1];//构建定义好的结构体类型数组 //初始化数组 for(i=1;i<=m;i++) //0号下标没有用,HT[m]表示元素的根结点 {HT[i].lch=0;//将2n-1个元素的lch,rch,parent置为0 HT[i].rch=0;HT[i].parent=0;}for(i=1;i<=n;i++){scanf("%d",&HT[i].weight);//输入前n个元素的weight值 }//建立哈夫曼树 for(i=n+1;i<=m;i++)//合并产生n-1个新结点 {void Select(HaffmanTree HT,int k,int &s1,int &s2);//在HT[k](1<k<i-1)中选择两个双亲域为0,并且最小的结点,并返回它们在HT中的序号 Select(HT,i-1,s1,s2);HT[s1].parent=i;HT[s2].parent=i;//表示从F中删除s1,s2 HT[i].lch=s1;HT[i].rch=s2;//s1,s2分别作为i的左右孩子 HT[i].weight=HT[s1].weight+HT[s2].weight;//i的权值为左右孩子的权值之和    }return OK;
}
void Select(HaffmanTree HT,int k,int &s1,int &s2)
{int i,j;int min1,min2;for(i=1;i<k;i++){if(HT[i].parent==0){min1=HT[1].weight;s1=1;if(HT[i].weight<min1){int t;t=min1;min1=HT[i].weight;HT[i].weight=t;//选出权值最小的元素 s1=i;}min2=HT[1].weight;s2=1;if(HT[i].weight<min2&&HT[i].weight>min1){int x;x=min2;min2=HT[i].weight;HT[i].weight=x;//选出权值次小的元素 s2=i;}}}
}
//主函数测试
int main()
{int n;printf("请输入要构造成哈夫曼树的结点数:\n");scanf("%d",&n);printf("请输入各结点所对应的权重:\n");if(CreatHT(HT,n))printf("CreatHT success\n");return 0;}

哈夫曼树的构造算法代码相关推荐

  1. 数据结构教程—哈夫曼树的构造算法

    哈夫曼树算法如下 (1)根据给定的n个权值,使对应节点构成n棵二叉树的森林,其中每棵二叉树都只有一个根节点,其左右子树均为空. (2)在森林中选取两棵节点权值最小的子树分别作为左右子树构造一棵新的二叉 ...

  2. 哈夫曼树的构造及C++代码实现

    哈夫曼树的构造过程: (1) 以权值分别为W1,W2...Wn的n各结点,构成n棵二叉树T1,T2,...Tn并组成森林F={T1,T2,...Tn},其中每棵二叉树 Ti仅有一个权值为 Wi的根结点 ...

  3. 哈夫曼树的构造C/C++代码实现

    哈夫曼树: 所谓哈夫曼(Huffman)树就是最优二叉树,是带权路径长度WPL最小的二叉树. 哈夫曼树的构造: 根据哈夫曼树的特点:权值越大的结点离根结点越近. 具体方法:依次选择权值最小的二个结点作 ...

  4. 哈夫曼树的构造及应用

    哈夫曼树的构造及应用 文章目录 哈夫曼树的构造及应用 带权路径长度 哈夫曼树定义 哈夫曼树的性质: 构造哈夫曼树 构造哈夫曼树存储及生成算法 算法框架 代码实操: 应用: 哈夫曼编码 带权路径长度 设 ...

  5. 赫夫曼树编码的算法及应用习题--数据结构

    赫夫曼树编码的算法及应用习题 1.构造赫夫曼树的方法 1.根据给定的n个权值{w1,w2,---wn},构成n棵二叉树的集合F={T1,T2...,Tn},其中每棵二叉树中只有一个带权为Wi的根结点, ...

  6. 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)

    目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...

  7. c语言最优树的构造,哈夫曼树的构造及编码 Haffman树的构造及其编码

    写出构造完整的哈夫曼树的编码 void HuffmanCoding(HuffmanCode HC[], int w[], int n) // w存放n个字符的权值(均>0),构造哈夫曼树HT, ...

  8. 哈夫曼树的构造(C语言实现)

    哈夫曼树的构造过程可以详见推荐博客:哈夫曼树以及哈夫曼编码的构造步骤 建议先看完推荐博客中的文字说明,或者自己找一本数据结构的树来仔细阅读以下关于哈夫曼树的构造 然后再来看下面给出的code 这里给出 ...

  9. 哈夫曼树的构造(手写图解)

    哈夫曼树的构造

最新文章

  1. flume自定义Interceptor
  2. Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)...
  3. python数据分析视频网盘-微专业Python数据分析实战
  4. java8 lambda 排序算法,Java8中排序算法比较器的三种写法(使用lambda表达式实现Comparator比较器)...
  5. 学习opencv(1)
  6. NET问答: 为什么 IEnumerablestring 不能被初始化?
  7. spring 注释的作用_Spring的@Primary注释在起作用
  8. NetBeans 7.2引入了TestNG
  9. python画图灰白_python 站点资料插值画图及白化
  10. Linux 主机信息 总览
  11. php如何设计自定义模型,php – Kohana ORM模型中的自定义方法
  12. windows-server-2012R2离线中文语言包安装
  13. 中国电影史上最大泄漏事故?国家版权局出手了...
  14. svn汉化插件安装步骤
  15. GIS和RS数据查找下载网址整合
  16. 打开caj文件显示服务器忙,欢迎使用CAJViewer-常见问题
  17. JVM相关命令查看GC情况
  18. Unity+Vuforia SDKAR开发系列教程--1.1 AR技术介绍
  19. 新装计算机配置,电脑新装系统后如何设置上网?
  20. ERROR StatusLogger Log4j2 could not find a logging implementation.

热门文章

  1. 如何在SuperMap iDesktop发布交通网络分析服务(学习笔记)
  2. Vue3+node.js网易云音乐实战项目(三)
  3. 数学公式截图识别神器Mathpix无限使用教程
  4. java学习笔记---5
  5. 单片机编程语言与开发环境
  6. 该怎么恢复断电丢失的文件呢
  7. ERP是基础,精益是方向(zt)
  8. matlab的qammod函数_利用matlab实现16QAM调制
  9. 金工如何运用计算机思维,金工实心得.doc
  10. Microsoft Security Essentials 微软免费杀毒软件下载