首页 > 编程语言 >哈夫曼树的实现-Java实现

哈夫曼树的实现-Java实现

时间:2023-05-23 21:44:06浏览次数:34  
标签:node Node Java 哈夫曼 val 实现 list int public

哈夫曼的核心思想在于,wpl最小;

 1 package dataSrtuct.TreeAlgorithm;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.List;
 6 
 7 public class HuffmanTree {
 8     public static void main(String[] args) {
 9         int[] arr={13,7,8,3,29,6,1};
10         Node root=CHuffmanTree(arr);
11         preOrder(root);
12     }
13     public static Node CHuffmanTree(int[] arr){
14         List<Node> list=new ArrayList<>();
15         for (int val: arr) {
16             list.add(new Node(val));
17         }
18         while (list.size()>1){
19             Collections.sort(list);
20             Node node=new Node(list.get(0).val+list.get(1).val);
21             node.left=list.get(0);
22             node.right=list.get(1);
23             //注意源码是重新创建了一个数组,所以删除一个元素,整体是相当与前移了,只需重复删除第一个即可;
24             list.remove(0);
25             list.remove(0);
26             list.add(node);
27         }
28         return list.get(0);
29     }
30     public static void preOrder(Node node){
31         if (node!=null)
32             node.preOrder(node);
33         else
34             System.out.println("是空树");
35     }
36 }
37 class Node implements Comparable<Node>{
38     int val;
39     Node left;
40     Node right;
41     public Node(int val){
42         this.val=val;
43     }
44 
45     @Override
46     public int compareTo(Node o) {
47         return this.val-o.val;
48     }
49 
50     @Override
51     public String toString() {
52         return "Node{" +
53                 "val=" + val +
54                 '}';
55     }
56     public void preOrder(Node node){
57         System.out.println(node.val);
58         if (node.left!=null)
59             preOrder(node.left);
60         if (node.right!=null)
61             preOrder(node.right);
62     }
63 }

 

标签:node,Node,Java,哈夫曼,val,实现,list,int,public
From: https://www.cnblogs.com/Mexcellent/p/17426492.html

相关文章

  • GB/T28181-2022针对H.265编码细化及技术实现
    技术背景新版国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》已于2022年12月30日发布,并将于2023年7月1日正式实施。国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》规定了公共安全视频监控联网系统(以下简称“联......
  • 编写javaweb用到的基本依赖,mybatis-config.xml代码,SqlSessionFactoryUtils.java
    这篇文章仅仅作为记录,供以后复制粘贴使用pom.xml<dependencies><!--Servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</vers......
  • Java Object 划分
    Object划分1.PO(persistantobject)持久对象PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。2.DO(DomainObject)领域对象就是从现实世界中抽象出来的有形或无形的业务实体。3.TO(TransferObject),数据传输对象不......
  • MAUI Blazor学习7-实现登录跳转页面
    MAUIBlazor学习7-实现登录跳转页面 MAUIBlazor系列目录MAUIBlazor学习1-移动客户端Shell布局-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习2-创建移动客户端Razor页面-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习3-绘制ECharts图表-SunnyTrudeau......
  • Java设计模式-原型模式
    简介原型模式是一种创建型设计模式,它允许在运行时通过复制现有对象来创建新对象,而不是通过构造函数创建。这个模式的核心思想是基于一个现有的对象克隆一个新的对象,这个过程对外部世界是透明的,就像对象从未被克隆过一样。原型模式的一个关键优点是可以避免在创建对象时重复性地......
  • 红包雨的架构设计及源码实现 中奖代码设计 一般有用 看1
    1.项目介绍学习目标系统的功能、背景、场景及需求在架构角度思索系统可能面临的问题以及解决方案运用中间件特性,完成架构设计主业务源码分析微服务的部署与动态扩容1.1项目概述1.1.1概述京东的红包雨大家可能都参与过,在某段时间内随机发放不同的红包,如果公司让你设计类似......
  • Java核心之多态
    多态解析:最早学一个变量------>内存空间(小容器) 只有一个后来学一个数组------>内存空间(小容器) 存储一组一样的数据类型 好处是在于堆内存中存储的地址连续 便于循环遍历 数组创建时必须指定长度  频繁的添加或删除元素 个数固定就很不方便再后来学习如何描述类---......
  • 利用Putty建立SSH通道实现代理
    以前有介绍过MyEnTunnel来代理,但是MyEnTunnel不支持Win7,其实MyEnTunnel就是利用putty的,我们为何不自己使用putty来创建SSH通道来实现代理上网呢?用putty建立SSH通道其实也很简单。设置putty很简单,打开putty,找到左边的SSH,选择Tunnels,然后在Sourceport上填入你想要的端口号,然后Add一......
  • WPF实现两个DataGrid列表的滚动条同步
    实现目标:左右两个DataGrid对比显示,希望拖动一个列表的滚动条,就把别一个列表的滚动条移动到相应位置。 主要思路是:通过FindVisualChildren找到两个DataGrid的ScrollViewer控件,然后注册两个控件的ScrollChanged事件,只要有一个ScrollViewer的VerticalOffset值变了,就相应地修改另......
  • [Java]instanceof和getClass()的区别
    getClass()willbeusefulwhenyouwanttomakesureyourinstanceisNOTasubclassoftheclassyouarecomparingwith. classA{}classBextendsA{}Objecto1=newA();Objecto2=newB();o1instanceofA=>trueo1instanceofB=>false......