哈夫曼树的构造 java_Java实现哈夫曼树的构造
哈夫曼树的内容这里不作解释,请自己搜索。下面给出哈夫曼树构造过程的 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.设在某通信系统中使用了八个字符,出现频率分别为0.08,0.05,0.1,0.12,0.26:0.18,0.14,0.07,试构造一棵哈夫曼树,给出哈夫曼编码,再写出先.中.后序遍历结果,最后将哈 ...
- 蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码
实验目的## 掌握哈夫曼树的概念.哈夫曼编码及其应用. 掌握生成哈夫曼树的算法. 会用哈夫曼树对传输报文进行编码. 掌握二叉树的二叉链表存储方式及相应操作的实现. ##实验内容## 用哈夫曼编码进行通 ...
- c语言赫夫曼树的编码与译码,哈夫曼树与编码译码实现
一.哈弗曼树的基本概念. 哈夫曼树,又称最优树,是一类带权路径长度最短的树.下面有几个概念: (1)路径. 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径. (2)路径长度. 路径上的分枝 ...
- 种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林
虽然今天不是植树节,但是我今天想种树. 文章目录 树,什么是树? 二叉树 定义 二叉树的创建 二叉树的前中后序遍历 前序遍历: 中序遍历 后序遍历 已知前序.中序遍历结果,还原二叉树 已知后序.中序遍 ...
- 数据结构—树与二叉树(Part Ⅵ)——平衡二叉树哈夫曼树
目录 平衡二叉树 平衡二叉树的定义 平衡二叉树的插入 LL型 RR型 代码思路 LR型 RL型 哈夫曼树和哈夫曼编码 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的结点类型 哈夫曼树构造的算法 哈夫曼编码 ...
- 霍夫曼树及霍夫曼编码的C语言实现,霍夫曼树及霍夫曼编码的C语言实现
从周五开始学习霍夫曼树,一直到今天终于完成,期间遇到了各类各样的棘手的问题,经过一遍遍在纸上分析每一步的具体状态得以解决.如今对学习霍夫曼树的过程加以记录web 首先介绍霍夫曼树数组 霍夫曼树(Huf ...
- 哈夫曼树(Huffman Tree),与哈夫曼编码
目录 一.哈夫曼树 1.什么是哈夫曼树? 2.哈夫曼树关键字说明 3.用代码实现哈夫曼树思路分析 4.代码实现 二.哈夫曼编码 1.哈夫曼编码基本介绍 2.原理剖析 3.代码实现 一.哈夫曼树 1.什 ...
- 心中有“树”!图文并茂介绍数据结构中常见的树(三)
在前面两篇文章中,我们简要介绍了数据结构中的各种[树]在搜索.数据库等领域的使用场景,希望对大家有所帮助. 本篇内容,是我们 <心中有"树"> 系列的最后一篇,我会在这 ...
- 心中有“树”!图文并茂介绍数据结构中常见的树(二)
计算机科学家尼古拉斯·沃斯(Niklaus Wirth)曾说过:编程=数据结构+算法 ,可见数据结构在编程中的重要性. 50 年过去了,计算机行业日新月异,大佬的这句名言是否还适用于当下?使用成熟且丰 ...
最新文章
- Ubuntu下用matplotlib作图时显示中文
- 第七周项目二-友元类
- Linux——快照与克隆
- mysql 提权方法_mysql常用的提权方法
- python 利用 for ... else 跳出双层嵌套循环
- 计算机二级考数组吗,计算机二级考试!
- 开源纯C#工控网关+组态软件(六)图元组件
- __builtin_expect详解
- 中华人民共和国公安部令 第 82 号- 互联网安全保护技术措施规定
- 微软发布2016年5月安全补丁 提醒及时修复
- ASP 中健壮的页结构的异常处理
- tomcat 虚拟目录与显示目录中文件列表
- Vue--改变鼠标指针的图片
- 各种图片格式之间的差别
- debian 10 系统运行 uml 与网络配置
- win10安装PHP环境
- 圣诞礼物送什么 荣耀畅玩5为你排忧解难
- java后端返回二进制图片 前端进行展示 详解
- Redis缓存一致性问题解决方案
- 阿里无影云电脑磁盘性能测试