wpl最小的就是赫夫曼树(所有叶子节点的带权路径长度之和最小)










写出来两个节点连接,然后循环就可以了

package tree.huffmantree;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class huffmanTree {public static void main(String[] args) {int  [] arr = {13, 7, 8, 3, 29, 6, 1};Node huffmanTree = createHuffmanTree(arr);//测试(前序遍历)preOrder(huffmanTree);}//编写一个前序遍历的方法public static void preOrder(Node root){if (root != null){root.preOrder();}else{System.out.println("空树");}}//创建赫夫曼树public static Node createHuffmanTree(int arr []){//第一步为了操作方便//1.遍历arr数组//2.将arr的每个元素构建成一个Node//3.将node放入到ArrayList中List<Node> nodes = new ArrayList<>();for(int value : arr){nodes.add(new Node(value));}//排序  从小到大while (nodes.size() > 1) {Collections.sort(nodes);//取出根节点权值最小的两颗二叉树//(1)取出权值最小的节点(二叉树)Node leftNode = nodes.get(0);//(2)取出第二小的节点Node rightNode = nodes.get(1);//(3)构建新的二叉树Node parent = new Node(leftNode.value + rightNode.value);parent.left = leftNode;parent.right = rightNode;//(4)删除掉取出的两个nodes.remove(leftNode);nodes.remove(rightNode);//(5)将parent加入到nodesnodes.add(parent);}//最后返回root节点return nodes.get(0);}
}
//创建节点类
//为了让node对象,支持排序,需要实现comparable接口
class Node implements Comparable<Node>{int value; //权值Node left; //左子节点Node right; //右子节点@Overridepublic int compareTo(Node o) {//从小到大排序return this.value - o.value;}public void preOrder(){System.out.println(this);if (this.left != null){this.left.preOrder();}if (this.right != null){this.right.preOrder();}}public Node(int value){this.value = value;}@Overridepublic String toString() {return "Node{" +"value=" + value +'}';}
}

结果:

数据结构 - 赫夫曼树相关推荐

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

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

  2. 数据结构--赫夫曼树及其应用

    讲解请参考 赫夫曼 ------ 赫夫曼树和赫夫曼编码的存储表示------ typedef struct {unsigned int weight;unsigned int parent,lchil ...

  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. Java多层的异常捕获
  2. 零积分下载,2014年辛星mysql教程秋季版第一本已经完工,期待您的支持
  3. imx51-linux的cpuinfo之分析
  4. HID接口设备-硬件要求
  5. [Bootstrap]全局样式(四)
  6. VS编译时使用/去除NuGet管理库
  7. php7.1 aes 加密解密,PHP7.1中AES加密解密方法 mcrypt_module_open()替换方案
  8. mysql 以 db 结尾_MySQL的高级部分
  9. 利用钩子机制取得Windows的消息监控权
  10. 关于操作 ASP.NET Web API的实例
  11. 深度学习——用向量重新组织输入数据
  12. php点击按钮变文字,点击按钮文字变成input框,点击保存变成文字的实现代码
  13. 简单的Tomcat中配置访问本地资源(含idea配置)
  14. 易语言组合框基本属性方法事件
  15. 在线编辑Word——插入表格
  16. matlab 1stopt,1stOpt或者MATLAB自定义公式曲线拟合 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  17. 免费地图资源(持续更新)
  18. 题:斐波那契数列(Fibonacci数列)——一个数最少几步变成斐波那契数列的数
  19. SQL:with as用法
  20. 用k-mer分析进行基因组调查:(二)用jellyfish进行k-mer频数统计

热门文章

  1. 【转】Apache 配置虚拟主机三种方式
  2. Codeforces 229D
  3. Makefile中=、:=、+=、?=的区别
  4. 旅途的意义- 献给二十五岁
  5. container_of深入理解
  6. 关于set的自定义比较函数的使用及结构体的上下二分用法
  7. 目前微型计算机的内存储量一般是多大的,微型计算机内存容量的大小一般是指什么而言...
  8. mysql存储过程并行_Mysql存储过程的执行顺序问题
  9. eclipse maven项目 class类部署不到tomcat下_Servlet tomcat部署
  10. ubuntu安装php5-mysql_Ubuntu下安装Apache2, php5 mysql