讲解请参考 赫夫曼

------ 赫夫曼树和赫夫曼编码的存储表示------

typedef struct {unsigned int weight;unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char ** HuffmanCode;void HuffmanCoding(HuffmanTree& HT,HuffmanCode & HC,int *w,int n)  {if (n < 1) return;\int m = 2* n + 1;HT = (HuffmanTree) malloc (m+1)* sizeof(HTNode); //0 号单元未用for ( HuffmanTree p = HT; i=1; i<=n; ++i; ++p; ++w)  *p = {*w,0,0,0,0};for(; i<=m; ++i; ++p)*p = {0,0,0,0};for(i = n+1; i<=m; i++) {  //建立HuffmanTreeSelect(HT,i-1,s1,s2);HT[s1].parent = i; HT[s2].parent = i; HT[i].lchild = s1;HT[i].rchild = s2;HT[i].weight = HT[s1].weight + HT[s2].weight;}HC = (HuffmanCode)malloc((n+1)* sizeof(char*));cd = (char*) malloc(n* sizeof(char));cd [n-1] = "\0";for ( i=1; i<=n; i++) {int start = n-1;for ( c=i, f = HT[i].parent; f!=0; c=f; f = HT[f].parent )if( HT[f].lchild == c )  cd [--start] = "0";else cd [--start] = "1";HC[i] = (char*) malloc ( (n-start)* sizeof(char)); strcyp(HC[i],&cd[start]);}free(cd);}

------ 无栈非递归遍历赫夫曼树,求赫夫曼编码------

HC = (HuffmanCode) malloc ( (n+1) * sizeof(char*));
int p = m, cdlen = 0;for ( int i=1; i<=m; ++i)  HT[i].weight = 0;while(p) {if ( HT[p].weight == 0 ) {HT[p].weight = 1; if ( HT[p].lchild != 0) {p = HT[p].lchild; cd[cdlen++] = "0";}else if ( HT[p].lchild == 0) {HC[p] = (char*) malloc ((cdlen+1) * sizeof(char));cd[cdlen] = "\0"; strcpy(HC[p],cd);}}else if ( HP[p].weight == 1) {HT[p].weight = 2;if ( HT[p].rchild != 0) {p = HT[p].rchild;cd [cdlen++] = "1";}else {HT[p].weight = 0; p = HT[p].parent; --cdlen;}}
}

数据结构--赫夫曼树及其应用相关推荐

  1. 数据结构--赫夫曼树

    数据结构 –赫夫曼树 文章目录 数据结构 一.一些概念 二.最优二叉树(赫夫曼树) 三.赫夫曼树的构造 四.赫夫曼编码 五.前缀编码 一.一些概念 路径:从树中一个结点到另一个结点之间的分支构成这两个 ...

  2. 数据结构 - 赫夫曼树

    wpl最小的就是赫夫曼树(所有叶子节点的带权路径长度之和最小) 写出来两个节点连接,然后循环就可以了 package tree.huffmantree;import java.util.ArrayLi ...

  3. 数据结构-赫夫曼树(三)

    Huffman Tree 哈夫曼树 霍夫曼树 概念 代码实现: 概念 路径和路径长度: 路径: 从一个节点往下可以达到的子节点或子子节点之间的通路 路径长度: 通路中分支的数目称之为路径长度. 根节点 ...

  4. 【数据结构】赫夫曼树

    数据结构赫夫曼树 /*名称:赫夫曼树语言:数据结构C语言版 编译环境:VC++ 6.0日期: 2014-3-26 */#include <stdio.h> #include <lim ...

  5. 2020-10-1 //严蔚敏《数据结构》 //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码

    //严蔚敏<数据结构> //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码 //(从叶子结点到根逆向求每个字符的赫夫曼编码)以及(无栈非递归遍历赫夫曼树,求赫夫曼编码) //自学中 ...

  6. 【赫夫曼树数据结构及其应用】

    本文主要介绍Java中赫夫曼树数据结构的基本原理.实现方式以及使用场景.赫夫曼树(Huffman Tree)是一种带权路径最短的二叉树,广泛应用于数据压缩和编码等领域. 一.赫夫曼树的基本概念 赫夫曼 ...

  7. 数据结构(十五)— 树结构之赫夫曼树及其应用

    现在我们都是讲究效率的社会,什么都要求速度, 在不能出错的情况下,做任何事情都讲究越快越好.在计算机和互联网技术中,文本压缩就是一个非常重要的技术. 玩电脑的人几乎都会应用压缩和解压缩软件来处理文档. ...

  8. java振动数据压缩_【数据结构-Java】最佳实践-数据压缩(使用赫夫曼树)

    一.需求 将给出的一段文本,比如 "i like like like java do you like a java" , 根据前面的讲的赫夫曼编码原理,对其进行数据压缩处理 二. ...

  9. 【赫夫曼树详解】赫夫曼树简介及java代码实现-数据结构07

    赫夫曼树(最优二叉树) 1. 简介 定义: 赫夫曼树是n个带权叶子结点构成的所有二叉树中,带权路径长度(WPL)最小的二叉树. 叶子结点的带权路径: 叶子结点权值*到根节点的路径长度(叶结点的层数) ...

最新文章

  1. NOIP2018 集训(一)
  2. Element UI——布局容器el-container子元素强制上下排列
  3. CTF之一次曲折获取Flag的过程
  4. 汇编中16进制的写法问题
  5. 是时候挥别 SQL Server 2008 了
  6. 【Servlet】Session会话跟踪技术
  7. linux内核那些事之struct page
  8. 第一款青少年搜索引擎“花漾搜索“APP正式上线
  9. java斗地主怎么出牌_斗地主滑动选牌出牌(Cocos Creator)
  10. 【原创】微信支付遇到的各种坑及解决方案随笔记录,invalid signature, “errMsg“:“chooseWXPay:fail“
  11. 【剑指 offer】—— 为公司员工的年龄排序
  12. php只保留两位小数
  13. 为何 linux 要用 tar.gz,而不用 7z 或 zip?
  14. vmware安装linux.iso
  15. centos7安装python2.6_centos7.2下yum和python重装问题及解决方法
  16. Hybrid Astar 算法剖析和实现(一)
  17. 云南钉钉早教、幼儿园、托儿所一体化智能管理系统解决方案
  18. java读取json文件
  19. 如何写论文摘要和引言
  20. 2019年全球PC浏览器排行榜!

热门文章

  1. qt 无法打开shell32_在Qt中用默认程序打开文件
  2. 求有向图的简单路径_2020福建农信社招聘-关键路径
  3. 教你如何快速入门python_如何快速入门python
  4. hdfs中与file数组类似的数组_如何在 JavaScript 中克隆数组
  5. 【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS)
  6. java联合主键_hibernate联合主键映射(注解版)
  7. 系统分析与控制_质量体系文件:测量系统分析控制程序
  8. adb android源码分析,Android Adb 源码解析(base on Android 9.0)
  9. oracle 时间集合,oracle 日期函数集合(集中版本)第2/2页
  10. p50会搭载鸿蒙吗,华为Mate40和华为P50也会搭载鸿蒙,华为Mate30跌至白菜价让路