哈夫曼树的内容这里不作解释,请自己搜索。下面给出哈夫曼树构造过程的 Java 实现。 结点类: 1./**2. * 二叉树节点3. */4.public class Node implements Comparable {5.6. private int value;7.8. private Node leftChild;9.10. private Node rightChild;11

哈夫曼树的内容这里不作解释,请自己搜索。下面给出哈夫曼树构造过程的 Java 实现。

结点类:1./**2. * 二叉树节点3. */4.public class Node implements Comparable {5.6. private int value;7.8. private Node leftChild;9.10. private Node rightChild;11.12. public Node(int value) {13. this.value = value;14. }15.16. public int getValue() {17. return value;18. }19.20. public void setValue(int value) {21. this.value = value;22. }23.24. public Node getLeftChild() {25. return leftChild;26. }27.28. public void setLeftChild(Node leftChild) {29. this.leftChild = leftChild;30. }31.32. public Node getRightChild() {33. return rightChild;34. }35.36. public void setRightChild(Node rightChild) {37. this.rightChild = rightChild;38. }39.40. public String toString(int level) {41. String indent = "";42. for (int i = 0; i < level; i++) {43. indent += " ";44. }45.46. return indent + value + "/n" +47. (leftChild != null ? leftChild.toString(level + 1) : "") +48. (rightChild != null ? rightChild.toString(level + 1) : "");49. }50.51. public int compareTo(Object o) {52. Node that = (Node) o;53. double result = this.value - that.value;54. return result > 0 ? 1 : result == 0 ? 0 : -1;55. }56.}

哈夫曼树构造类:1.public class HuffmanTreeBuilder {2. 3. public static void main(String[] args) {4. List nodes = Arrays.asList(5. new Node(40),6. new Node(8),7. new Node(10),8. new Node(30),9. new Node(10),10. new Node(2)11. );12. 13. Node node = HuffmanTreeBuilder.build(nodes);14. System.out.println(node.toString(0));15. }16. 17. /**18. * 构造哈夫曼树19. *20. * @param nodes 结点集合21. *22. * @return 构造出来的树的根结点23. */24. private static Node build(List nodes) {25. nodes = new ArrayList(nodes);26. sortList(nodes);27. while (nodes.size() > 1) {28. createAndReplace(nodes);29. }30. return nodes.get(0);31. }32. 33. /**34. * 组合两个权值最小结点,并在结点列表中用它们的父结点替换它们35. *36. * @param nodes 结点集合37. */38. private static void createAndReplace(List nodes) {39. Node left = nodes.get(nodes.size() - 1);40. Node right = nodes.get(nodes.size() - 2);41. Node parent = new Node(left.getValue() + right.getValue());42. parent.setLeftChild(left);43. parent.setRightChild(right);44. nodes.remove(nodes.size() - 1);45. nodes.remove(nodes.size() - 1);46. nodes.add(parent);47. sortList(nodes);48. }49. 50. /**51. * 将结点集合由大到小排序52. *53. * @param nodes 结点集合54. */55. private static void sortList(List nodes) {56. Collections.sort(nodes);57. }58.}

说明:

1、HuffmanTreeBuilder 的 25 行新建了一个结点集合,以免对参数进行修 改。

2、createAndReplace 方法首先获取末尾两个节点,然后构造它们的父结点 ,接着在结点集合中将这两个节点删除,把父结点加进去。

哈夫曼树的构造 java_Java实现哈夫曼树的构造相关推荐

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

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

  2. 蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码

    实验目的## 掌握哈夫曼树的概念.哈夫曼编码及其应用. 掌握生成哈夫曼树的算法. 会用哈夫曼树对传输报文进行编码. 掌握二叉树的二叉链表存储方式及相应操作的实现. ##实验内容## 用哈夫曼编码进行通 ...

  3. c语言赫夫曼树的编码与译码,哈夫曼树与编码译码实现

    一.哈弗曼树的基本概念. 哈夫曼树,又称最优树,是一类带权路径长度最短的树.下面有几个概念: (1)路径. 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径. (2)路径长度. 路径上的分枝 ...

  4. 种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林

    虽然今天不是植树节,但是我今天想种树. 文章目录 树,什么是树? 二叉树 定义 二叉树的创建 二叉树的前中后序遍历 前序遍历: 中序遍历 后序遍历 已知前序.中序遍历结果,还原二叉树 已知后序.中序遍 ...

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

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

  6. 霍夫曼树及霍夫曼编码的C语言实现,霍夫曼树及霍夫曼编码的C语言实现

    从周五开始学习霍夫曼树,一直到今天终于完成,期间遇到了各类各样的棘手的问题,经过一遍遍在纸上分析每一步的具体状态得以解决.如今对学习霍夫曼树的过程加以记录web 首先介绍霍夫曼树数组 霍夫曼树(Huf ...

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

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

  8. 心中有“树”!图文并茂介绍数据结构中常见的树(三)

    在前面两篇文章中,我们简要介绍了数据结构中的各种[树]在搜索.数据库等领域的使用场景,希望对大家有所帮助. 本篇内容,是我们 <心中有"树"> 系列的最后一篇,我会在这 ...

  9. 心中有“树”!图文并茂介绍数据结构中常见的树(二)

    计算机科学家尼古拉斯·沃斯(Niklaus Wirth)曾说过:编程=数据结构+算法 ,可见数据结构在编程中的重要性. 50 年过去了,计算机行业日新月异,大佬的这句名言是否还适用于当下?使用成熟且丰 ...

最新文章

  1. Ubuntu下用matplotlib作图时显示中文
  2. 第七周项目二-友元类
  3. Linux——快照与克隆
  4. mysql 提权方法_mysql常用的提权方法
  5. python 利用 for ... else 跳出双层嵌套循环
  6. 计算机二级考数组吗,计算机二级考试!
  7. 开源纯C#工控网关+组态软件(六)图元组件
  8. __builtin_expect详解
  9. 中华人民共和国公安部令 第 82 号- 互联网安全保护技术措施规定
  10. 微软发布2016年5月安全补丁 提醒及时修复
  11. ASP 中健壮的页结构的异常处理
  12. tomcat 虚拟目录与显示目录中文件列表
  13. Vue--改变鼠标指针的图片
  14. 各种图片格式之间的差别
  15. debian 10 系统运行 uml 与网络配置
  16. win10安装PHP环境
  17. 圣诞礼物送什么 荣耀畅玩5为你排忧解难
  18. java后端返回二进制图片 前端进行展示 详解
  19. Redis缓存一致性问题解决方案
  20. 阿里无影云电脑磁盘性能测试

热门文章

  1. idea 搜索不到文件内容
  2. 字幕基础以及滤镜处理字幕的
  3. 2022年,还能转行数据分析师吗
  4. pandas 的apply 简直没法用啊
  5. 无线路由器,如何设置?
  6. 利用XP ie浏览器的漏洞获取shell
  7. minemc服务器正版验证,MineBlock
  8. 不凡的夫夫(斯特林公式)
  9. 360创业故事【转】
  10. 如何理解算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等?