霍夫曼树:给定n个权值做为n个叶子节点,若该树的带权路径长度达到最小,这棵树为最优二叉树,也称赫夫曼树。

霍夫曼树中的几个概念

路径和路径长度

一棵树中,一个节点往下可以达到的孩子或孙子节点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根节点的层数为1,则从根节点到第L层节点的路径长度为L-1.

节点的权及带权路径长度

若将树中节点赋给一个有某种含义的数值,则称这个数值为该节点的全,节点的带权路径长度为:从根节点到该节点之间的路径长度与该节点的权的乘积。

树的带权路径长度

所有叶子节点的带权路径长度之和,记为WPL。 权值越大的节点距离根节点月季的二叉树草率最有二叉树 wpl最小的就是赫夫曼树

霍夫曼树代码实现

public class Node implements Comparable<Node>{private int value;private Node left;private Node right;public Node() {}public Node(int value) {this.value = value;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public Node getLeft() {return left;}public void setLeft(Node left) {this.left = left;}public Node getRight() {return right;}public void setRight(Node right) {this.right = right;}@Overridepublic String toString() {return "" + value;}@Overridepublic int compareTo(Node o) {return this.value - o.value;}public void preorderTraversal(){System.out.println(this);if (this.left != null){this.left.preorderTraversal();}if (this.right != null){this.right.preorderTraversal();}}
}

数组转霍夫曼树工具类

public class HuffmanUtil {public static Node createHuffmanTree(int[] array){List<Node> nodeList = new ArrayList<>();for (int val : array){nodeList.add(new Node(val));}Node root = null;while (nodeList.size() > 1){//排序Collections.sort(nodeList);//取出前两位Node left = nodeList.get(0);Node right = nodeList.get(1);//得出和,新建节点root = new Node(left.getValue() + right.getValue());root.setLeft(left);root.setRight(right);//删除旧节点,加入新节点nodeList.remove(left);nodeList.remove(right);nodeList.add(root);}return root;}
}

测试方法(前序遍历输出赫夫曼树)

public class TestApp {public static void main(String[] args) {int[] array = {13,7,8,29,6,1};Node root = HuffmanUtil.createHuffmanTree(array);root.preorderTraversal();}
}

霍夫曼树(赫夫曼树、哈夫曼树)相关推荐

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

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

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

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

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

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

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

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

  5. 哈夫曼树带权路径长度c语言,【哈夫曼树】求结点的哈夫曼的带权路径长度

    本文用C++采用顺序存储实现求哈夫曼树(即最小生成树)的带权路径长度 努力 下面来了解一下哈夫曼树的构造以及如何求带权路径长度: 哈夫曼树为带权路径长度最小的树 哈夫曼树 哈夫曼树的顺序存储 [问题描 ...

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

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

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

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

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

    提到数据结构中的树(Tree) ,大家应该都不陌生,相关书籍中都有大段篇幅的介绍,刷 Leetcode 的时候会遇到很多相关问题.很多人往往会用 "手写红黑树" 来形容面试难度很高 ...

  9. R语言构建xgboost模型:使用xgboost的第一颗树(前N颗树)进行预测推理或者使用全部树进行预测推理、比较误分类率指标

    R语言构建xgboost模型:使用xgboost的第一颗树(前N颗树)进行预测推理或者使用全部树进行预测推理.比较误分类率指标 目录

  10. KD树是什么? 为什么要用KD树? KD树怎么用? KD树和KNN的关联是什么?

    KD树是什么? 为什么要用KD树? KD树怎么用? KD树和KNN的关联是什么? sklearn中如何配置? 为了提高KNN的搜索效率,这里介绍一种可以减少计算距离次数的方法---KD树方法. KD树 ...

最新文章

  1. VisualSVN Server2.5服务器迁移
  2. 台风怎么看内存颗粒_生态板、密度板、颗粒板各有好处,看你怎么用了!
  3. 面试题整理11 数字在排序数组中出现的次数
  4. Selenium 自动化测试基础知识
  5. 三极管稳压管组成的线性电源关键理解
  6. qt html导pdf 页眉,如何使用wkhtmltopdf unpatched qt在每个页面上添加页眉和页脚?
  7. CarAppFocusManager
  8. 矩池云上如何修改cuda版本
  9. windbg远程调试方法
  10. 前方高能!java并发编程实战百度网盘
  11. matlab插值法计算根号,怎么用matlab利用拉格朗日插值计算法的原理编写并计算函数所在节点的近似值....
  12. SPSS学习 日记
  13. 方舟服务器商店系统怎么弄,方舟生存进化怎么设置商店系统
  14. chrome浏览器主页变成hao123
  15. 烙铁-电子工程师的画笔
  16. Machine Learning Practical 爱宝课程记录week1
  17. iOS微信支付--解析失败
  18. JS实现多张图片绕中心点转动
  19. Mysql出现问题:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)解决方案
  20. Java个人支付宝知宝收款调用_Andriod 监听微信支付宝收款实现个人支付宝支付接口!附安卓 App(开源)...

热门文章

  1. 反余弦函数用途之一:关系距离计算
  2. ai怎么取消颗粒效果_怎么用AI制作粒子消散效果字体?
  3. 华为防火墙管理地址的坑
  4. 几个可以提高工作效率的Python内置小工具
  5. leetcode总结
  6. 证明:如果向量组A可由向量组B线性表示,那么A的秩小于等于B的秩
  7. 《算法之美》 第三章:数据结构
  8. 微信分享网页不显示缩略图
  9. 关于win10中视频文件不显示缩略图的问题
  10. 【spring 的 init and destory 方法】