赫夫曼树+图解

图解

在这里插入图片描述

代码实现

package com.atguigu.huffmanTree;import javax.swing.*;
import java.awt.geom.RoundRectangle2D;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;/*** @创建人 wdl* @创建时间 2021/3/26* @描述*/
public class HuffmanTree {public static void main(String[] args) {int arr[]={13,7,8,3,29,6,1};Node root = createHuffmanTree(arr);//测试一把preOrder(root);}//编写一个前序遍历的方法public static void preOrder(Node root){if(root!=null){root.preOrder();}else {System.out.println("是空树,不能遍历~~");}}//创建赫夫曼树的方法/**** @param arr 需要创建成赫夫曼树的数组* @return 创建好后的赫夫曼树的root节点*/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);System.out.println(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.从ArrayList中删除处理过的二叉树nodes.remove(leftNode);nodes.remove(rightNode);//5.将parent加入到nodesnodes.add(parent);//            System.out.println("第一次处理后"+nodes);}//返回赫夫曼树的root节点return nodes.get(0);}}
//创建节点类
//为了让Node对象支持排序Collections集合排序
//让Node实现Comparable接口
class Node implements Comparable<Node>{int value;//节点权值Node left;//指向左子节点Node right;//指向右子节点//写一个前序遍历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 +'}';}@Overridepublic int compareTo(Node o) {//从小到大进行排序return this.value-o.value;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四足爬行机器人运动_有自我意识机器人横空出世,还能自我复制,专家表示需警惕其失控...

有自我意识是什么样的&#xff1f;人类自身其实就是有自我意识的生命体&#xff0c;那作为有自我意识的生命体&#xff0c;你想过自我意识是指哪些特征吗&#xff1f;指尖科技说小编先跟你探讨一下&#xff1a;1.主动做事情。就是说在没有其他人控制的情况下&#xff0c;它可以…

IDEA中创建maven项目详细步骤,很清晰

IDEA中创建maven项目详细步骤&#xff0c;很清晰_格子衫111的博客-CSDN博客_idea maven构建 前言 在IDEA中创建Maven项目&#xff0c;前提是已经安装配置好Maven环境 。 如还未配置安装Maven的&#xff0c;请先下载安装。如何下载安装&#xff0c;可参考我另外篇文章&#xff1…

ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java

IEmpService.java的代码&#xff1a; /** * Title: IEmpService.java * Package org.service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午10:08:05 * version V1.0 */ package org.service;import org.…

微软AirSim,一个无人机和机器人的模拟器

微软开发并开源了AirSim&#xff0c;一个用于模拟无人机在全世界的飞行的工具。这个模拟器基于虚幻引擎&#xff08;Unreal Engine&#xff09;构建&#xff0c;微软很快会增加对机器人和其它类型移动设备的支持。 微软在内部开发了航空信息系统和机器人平台&#xff0c;这个研…

JavaScript学习总结(四)——逻辑OR运算符详解

转载自 JavaScript学习总结(四)——逻辑OR运算符详解 在JavaScript中&#xff0c;逻辑OR运算符用||表示 var bTrue true;var bFalse false;var bResult bTrue || bFalse; 下面的真值表描述了逻辑AND运算符的行为: 运算数 1运算数 2结果truetruetruetruefalsetruefals…

android 渐变蒙版_干货分享(第八期):PS蒙版教学,利用蒙版制造渐隐效果

哈喽&#xff0c;大家好&#xff0c;在下乔安生&#xff0c;之前已经跟大家说过图层蒙版的一个应用。今天再跟大家分享下&#xff0c;如何利用蒙版制造出渐隐的一个效果。利用图层蒙版 &#xff0c;为图像增加渐隐的感觉&#xff0c;然后利用画笔工具来修改图层蒙版以及改变图层…

ssh(Spring+Spring mvc+hibernate)——DeptController.java

/** * Title: DeptController.java * Package org.action * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-12-27 上午10:54:42 * version V1.0 */ package org.action;import java.util.List;import org.entity.Dept;…

Java Long类型处理精度丢失问题 传递给前端精度丢失

推荐统一处理 不需要单独处理了 package com.wochanye.ssc.portal.config; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; import org.springframework.context.a…

ssh(Spring+Spring mvc+hibernate)——EmpController

/** * Title: DeptController.java * Package org.action * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-12-27 上午10:54:42 * version V1.0 */ package org.action;import java.text.SimpleDateFormat; import jav…

LEANSOFT领航员 – 基于Docker的DevOps实战培训

2016年&#xff0c;LEANSOFT推出了一系列广受开发人员欢迎的培训&#xff0c;包括《构建高效DevOps团队》&#xff0c;《基于Azure的容器化DevOps数据中心》和《Docker基础培训》。在这些培训中&#xff0c;我们得到了很多反馈&#xff0c;大家对使用Docker来支持DevOps的场景有…

高德地图路线规划 时间_路线准、播报拥堵及时,这次自驾出行高德地图可算是帮了大忙...

在我们日常生活中,自驾已经成为一种很普遍的出行方式,不仅在时间上灵活,特别是一家人出行也比较方便。伴随自驾出行的除了爱车外,一款靠谱的地图导航软件也成为了必不可少的旅行伙伴。目前比较常用的地图导航软件当属高德、百度和腾讯,不少人手机里都会有这三款软件中的其中一个…

JavaScript学习总结(七)——JavaScript函数(function)

转载自 JavaScript学习总结(七)——JavaScript函数(function) 一、函数基本概念 为完成某一功能的程序指令(语句)的集合&#xff0c;称为函数。 二、JavaScript函数的分类 1、自定义函数(我们自己编写的函数)&#xff0c;如&#xff1a;function funName(){} 2、系统函数(J…

ssh(Spring+Spring mvc+hibernate)——applicationContext-servlet.xml

<?xml version"1.0" encoding"UTF-8"?> <beansxmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"xm…

JavaScript学习总结(八)——JavaScript数组

转载自 JavaScript学习总结(八)——JavaScript数组 JavaScript中的Array对象就是数组&#xff0c;首先是一个动态数组&#xff0c;无需预先制定大小&#xff0c;而且是一个像Java中数组、ArrayList、Hashtable等的超强综合体。 一、数组的声明 常规方式声明&#xff1a; 1、…

命令点无效怎么处理_CAD执行修改命令,你试过重复选择对象吗?

你在执行命令的时候&#xff0c;是习惯先选择对象还是之后才选择对象的呢&#xff1f;不知道细心的你有没有发觉&#xff0c;明明已经先选择对象了才执行命令&#xff0c;为什么之后还要重复选择对象&#xff1f;这里可以分几种情况来讨论一下。CAD版本&#xff1a;中望CAD 202…

gson转对象

gson转对象 Gson 中对象类型的相互转换 最近使用Gson来处理了json串&#xff0c;使用了一些常用的方法&#xff0c;为加深印象&#xff0c;因此记录下来 package JsonObjectDemo;import com.google.gson.*; import com.google.gson.reflect.TypeToken;import java.util.Array…

一起脱去小程序的外套和内衣 - 微信小程序架构解析

作者介绍&#xff1a; 渠宏伟&#xff0c;腾讯高级工程师&#xff0c;从事Web前端开发5年&#xff0c;先后负责企鹅电竞、腾讯视频VIP、腾讯OA开发框架、腾讯微信HR助手等项目。对Web前端架构、.NET架构有丰富的经验。 | 导语 微信小程序的公测掀起了学习小程序开发的浪潮&…

基数排序+速度测试

package com.atguigu.sort;import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date;/*** 创建人 wdl* 创建时间 2021/3/22* 描述*/ public class RadixSort {public static void main(String[] args) {//53, 3, 542, 748, 14, 214 // int …

ssh(Spring+Spring mvc+hibernate)——DeptServiceImpl.java

/** * Title: DeptServiceImpl.java * Package org.service.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午10:08:50 * version V1.0 */ package org.service.impl;import java.io.Serializable; imp…