代码如下:

package HuffmanTreeArrays;import java.util.ArrayList;
import java.util.Scanner;public class HuffmanTree {private class TreeNode{private int val;private int left;private int right;private int parent;public TreeNode(){val = 0;left = -1;right = -1;parent = -1;}public TreeNode(int e){val = e;left = -1;right = -1;parent = -1;}}private TreeNode data[];private int capacity;private int size;private final int maxData;public HuffmanTree(int n){maxData = 999999999;size = n;capacity = 2*n-1;data = new TreeNode[2*n];TreeNode t = new TreeNode(maxData);data[0] = t;Scanner sc = new Scanner(System.in);for (int i = 1;i<=n;i++){t = new TreeNode(sc.nextInt());data[i] = t;}}public void buildHuffmanTree(){int s1,s2;for (int i = size+1;i<=capacity;i++){s1 = s2 = 0;for (int j = 1;j<=i-1;j++){if (data[j].parent==-1) {if (data[j].val < data[s1].val) {s2 = s1;s1 = j;} else if (data[j].val < data[s2].val) {s2 = j;}}}data[s1].parent = i;data[s2].parent = i;TreeNode t = new TreeNode(data[s1].val+data[s2].val);t.left = s1;t.right = s2;data[i] = t;printNode(t);}}private void printNode(TreeNode t){System.out.println(t.val+" ("+data[t.left].val+","+data[t.right].val+")");}public void codeHuffmanTree(){if (size==0){System.out.println("The HuffmanTree is empty");return ;}ArrayList<Integer> arrays = new ArrayList<>();dfsTree(data[capacity],arrays);}private void dfsTree(TreeNode t,ArrayList<Integer> arrays){if (t.left==-1 && t.right==-1){System.out.println(t.val+" "+arrays);return ;}if (t.left!=-1){arrays.add(0);dfsTree(data[t.left],arrays);arrays.remove(arrays.lastIndexOf(0));}if (t.right!=-1){arrays.add(1);dfsTree(data[t.right],arrays);arrays.remove(arrays.lastIndexOf(1));}}}

测试类如下:

package HuffmanTreeArrays;public class TestHuffmanTree {public static void main(String[] args){HuffmanTree hf = new HuffmanTree(7);hf.buildHuffmanTree();hf.codeHuffmanTree();}
}

Java实现Huffman哈夫曼树(数组实现)相关推荐

  1. Java实现Huffman哈夫曼树

    代码如下: package HuffmanTree;import java.util.ArrayList; import java.util.LinkedList; import java.util. ...

  2. Huffman霍夫曼树,霍夫曼编码

    霍夫曼树基本概念: 路径:从一个结点往下到孩子或孙子结点之间的同理 路径长度:如结点1到结点7的路径长度=2 结点的权:将结点的某一属性值作为结点的权 带权路径长度:从根节点到该结点*该结点的权:如结 ...

  3. Huffman哈夫曼树编码字符,binarytree,Python

    Huffman哈夫曼树(霍夫曼树,赫夫曼树)在通信领域最主要的应用是数据编码.假设现在有A.B.C.D.E五个字符,它们出现的概率或者权值不同,从A到E,权值依次降低,那么就可以用哈夫曼最优二叉树对其 ...

  4. 每日四题打卡-4.15:耍杂技的牛/贪心绝对值不等式-货仓选址/贪心排序不等式-排队打水/huffman哈夫曼树-合并果子

    耍杂技的牛 具体:https://blog.csdn.net/qq_27262727/article/details/105515507 农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此 ...

  5. Java数据压缩算法——哈夫曼树

    --在这个特殊的日子里,向烈士们致敬!!! 目录 一.简介 二.实现思路 2.1 路径 2.2 节点的权及带权路径长度 2.3 树的带权路径长度 2.4 霍夫曼树的定义 2.5 构造霍夫曼树 三.代码 ...

  6. 【Java数据结构】赫夫曼树

    哈弗曼树 哈弗曼树定义 哈弗曼树示例 哈弗曼树代码实现 哈弗曼树定义 给定 N 个权值作为 N 个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也称为哈 ...

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

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

  8. Huffman树(哈夫曼树)

    哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数).树的带权路径 ...

  9. 哈夫曼树原理及Java编码实现

    文章目录 前言 一.哈夫曼树原理 二.哈夫曼编码(Java题解) 参考资料 前言 所有博客文件目录索引:博客目录索引(持续更新) 源代码:Gitee-Huffman.java.Github-Huffm ...

最新文章

  1. (Interrupt Latency) 中断延迟
  2. 在switch case 语句中能否使用continue 关键字?为什么?
  3. 如何得到当前application server的host name和port number
  4. python中 是什么运算符_Python 运算符
  5. c++ 使用nacos_想自学Maven?推荐Maven极简高速入门及常规使用
  6. 编译原理中中间代码生成---C语言实现
  7. 涉及反射/内省/泛型的优化实践
  8. java 构造函数嵌套_java – spring – 构造函数注入和覆盖嵌套bean的父定义
  9. ASP.NET 访问项目网站以外的目录文件
  10. php ob系列的函数
  11. sublime text3 炫酷主题
  12. 我的第一个Imx6ULL应用《百度图像识别》
  13. 刷题总结——寻宝游戏(bzoj3991 dfs序)
  14. 如何一键关闭win安全中心(Windows Defender )
  15. 关于AI-人工智能看法,进行漫谈。
  16. android如何在登录界面嵌入图片,Android内嵌H5页面调用手机图片操作
  17. 腾讯地图中轻松定义多边形
  18. Java中表格背景设置透明
  19. 【Python小案例教程1】Python开发简单记事本
  20. WebRTC多人音视频聊天架构及实战

热门文章

  1. [转].NET 开源项目 Anet 介绍
  2. 【ArcGIS Pro微课1000例】0015:ArcGIS Pro中属性字段分式标注案例教程
  3. 【ArcGIS风暴】ArcGIS中国地表覆盖数据GlobeLand30预处理(批量投影、拼接、掩膜提取)附成品下载
  4. 【遥感数字图像处理】实验:Erdas 软件的认识与使用
  5. ENVI帮助研究人员发现金矿
  6. IOS学习笔记七之KVC和Key路径
  7. C和指针之动态内存分配常见问题和总结
  8. linux nginx线程池,nginx使用线程池提升9倍性能
  9. ubuntu下amd超频工具_Ubuntu16.04 版预装AMD GPU驱动【最新版】_Linux_Ubuntu-云市场-阿里云...
  10. 如何查看文件夹里有几张图片_如何把几张图片合成一个pdf?图片合并为pdf的操作教程...