这篇文章使用纯c来写的,实现了生成哈夫曼树、求WPL和生成哈夫曼编码的应用,思路是,先定义一个结构体如下

typedef struct node

{

int weight;

struct node *lchild,*rchild;

struct node *next;

}HuffNode;

先生成单链表(用next链接),还存储输入的权值(weight),单链表无头结点(因为最后要转化成二叉树,所以不用头结点),而且每一次节点的插入都使单链表保持递增的状态(为生成哈夫曼树做准备)。

计算WPL用到简单的递归,如下

int CalcWPL(HuffNode *huff,int wpl)

{

HuffNode *p = huff;

if(!p)

return 0;

else

{

if(!p->rchild&&!p->rchild)

return p -> weight*wpl;

else

return CalcWPL(p->lchild,wpl+1) + CalcWPL(p->rchild,wpl+1);

}

}

在计算WPL的代码上,稍作改动,就可以生成哈夫曼编码,如下

void HuffCode(HuffNode *huff,int len)

{

HuffNode *p = huff;

static int a[MAX];

c语言递归计算哈夫曼编码,哈夫曼树遍历求WPL和哈夫曼编码C语言--For初学者相关推荐

  1. 哈夫曼树带权路径长度c语言,【哈夫曼树】求结点的哈夫曼的带权路径长度

    本文用C++采用顺序存储实现求哈夫曼树(即最小生成树)的带权路径长度 努力 下面来了解一下哈夫曼树的构造以及如何求带权路径长度: 哈夫曼树为带权路径长度最小的树 哈夫曼树 哈夫曼树的顺序存储 [问题描 ...

  2. 基于哈夫曼编码对txt文档实现压缩处理 | 算法分析之贪心算法设计 C语言版

    声明:凡代码问题,欢迎在评论区沟通.承蒙指正,一起成长! 目录 一.实验内容与要求 二.概要设计 三.直接上代码 四.运行结果 一.实验内容与要求 内容:哈夫曼编码是广泛地用于数据文件压缩的十分有效的 ...

  3. 算法学习笔记——数据结构:哈夫曼树、带权路径长度WPL、哈夫曼编码

    引入 合并果子问题如下: 有n堆果子,每次可以合并任意两堆果子,耗费体力值为[两堆果子数之和],最终在n-1次合并后,得到一堆果子. 给出合并的方案,使得耗费的体力值最小 例如有3堆果子,质量依次为1 ...

  4. 哈夫曼树(Huffman Tree),与哈夫曼编码

    目录 一.哈夫曼树 1.什么是哈夫曼树? 2.哈夫曼树关键字说明 3.用代码实现哈夫曼树思路分析 4.代码实现 二.哈夫曼编码 1.哈夫曼编码基本介绍 2.原理剖析 3.代码实现 一.哈夫曼树 1.什 ...

  5. 关于哈夫曼树的例题(含哈夫曼树的具体构造过程)

    1.设在某通信系统中使用了八个字符,出现频率分别为0.08,0.05,0.1,0.12,0.26:0.18,0.14,0.07,试构造一棵哈夫曼树,给出哈夫曼编码,再写出先.中.后序遍历结果,最后将哈 ...

  6. 数据结构—树与二叉树(Part Ⅵ)——平衡二叉树哈夫曼树

    目录 平衡二叉树 平衡二叉树的定义 平衡二叉树的插入 LL型 RR型 代码思路 LR型 RL型 哈夫曼树和哈夫曼编码 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的结点类型 哈夫曼树构造的算法 哈夫曼编码 ...

  7. 创建哈夫曼树并求带权路径长度

    创建哈夫曼树并求带权路径长度 [问题描述]根据给定的权重,构造哈夫曼树,输出其带权路径长度. [输入形式]输入权重,空格作为分隔,回车结束,权重个数小于10. [输出形式]哈夫曼树的带权路径长度. [ ...

  8. 哈夫曼树及求其WPL的算法

    哈夫曼树及求其WPL算法 一.概念 给定 N N N个权值作为 N N N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree ...

  9. c语言字符串用for语句去重,python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for...

    也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...

最新文章

  1. php的反射作用是什么意思,php反射的作用是什么
  2. C++文件输入和输出
  3. 解决ftp的pasv模式下iptables设置问题
  4. angular2安装笔记
  5. JS实现的五级联动菜单效果完整实例
  6. 随想录(ros学习笔记)
  7. android微信第三方登录怎么通过code获取openid?
  8. nodejs学习笔记-入门helloworld
  9. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-订单表的设计(源码可下载)...
  10. 官方client php api接口日记
  11. SourceTree 实现 git flow 流程
  12. 高清人脸数据集—FFHQ
  13. 视频直播本地测试服务器搭建
  14. 【VB】中CInt()、Fix()、Int()的区别
  15. 地图影像图数量存储大小精度推算
  16. 福州大学java期末试卷,Java Web认证题.doc
  17. RC有源滤波器之带通滤波器(四)
  18. 音量控制按钮有小红叉插头已从插孔拔出
  19. 奈学 AI架构师 p6,p7,p8
  20. db2 数据库配置HADR+TSA添加集群节点

热门文章

  1. 阿里云域名解析服务器
  2. 生物医学工程方向——SCI投稿经验分享 (Ultrasound in Medicine Biology)
  3. 你的人生中,最恐惧的事情是什么
  4. Yeelink:将复杂的传感器以极简的方式组到同一个网络内
  5. 抖音卖酒该如何操作?抖音怎么引流卖酒
  6. 大学生考计算机二级的好处,大学生考计算机二级到底有没有卵用?
  7. Proteus 8.9 SP2 专业版一体化快速安装教程(配包)
  8. python-docx删除段落(含回车符)v202111221750
  9. 年轻打工人,在互联网大厂“边缘”岗位挣扎
  10. Mail.Ru邮箱注册教程