博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哈夫曼树java代码实现
阅读量:3888 次
发布时间:2019-05-23

本文共 1811 字,大约阅读时间需要 6 分钟。

哈夫曼树?

哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明。
在这里插入图片描述
在这里插入图片描述

package com.sun.hafumanTree;import java.security.PublicKey;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.List;public class hafumantree {
/** * @param args */ public static void main(String[] args) {
// TODO Auto-generated method stub int arr[]={
13,7,8,3,29,6,1}; Node root=create(arr); preOrder(root); } public static void preOrder(Node root){
if(root !=null){
root.preOrder(); } } //创建哈夫曼树 public static Node create(int[] arr){
//1.遍历数组 //2.数组元素构成node //3.将node放入ArrayList List
nodes=new ArrayList
(); for (int value : arr) {
Node node=new Node(value); nodes.add(node); } while(nodes.size()>1){
//排序从小到大 Collections.sort(nodes); //取出根节点权值最小的二叉树 Node leftnode=nodes.get(0); //取出根节点权值第二小的二叉树 Node rightnode=nodes.get(1); ///构建新的二叉树 Node parent=new Node(leftnode.value+rightnode.value); parent.left=leftnode; parent.right=rightnode; //删除掉用过的节点 nodes.remove(leftnode); nodes.remove(rightnode); //将新构建的parent加入到nodes nodes.add(parent); } return nodes.get(0); } //创建节点//让节点实现Comparable接口 static class Node implements Comparable
{
int value;//节点权值 Node left;//指向左子节点 Node right;//指向右子节点 public Node(int value) {
this.value = value; } @Override public String toString() {
return "Node [value=" + value + ", left=" + left + ", right=" + right + "]"; } @Override public int compareTo(Node o) {
// TODO Auto-generated method stub //表示从小到大排序 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(); } } }}

转载地址:http://tothn.baihongyu.com/

你可能感兴趣的文章
在 WordPress 指定页面加载指定 JavaScript 或 CSS 代码
查看>>
Apache配置多个监听端口和不同的网站目录的简单方法
查看>>
Linux 搭建 discuz 论坛
查看>>
如何在discuz帖子中插入视频
查看>>
怎么更改织梦网站logo和默认广告
查看>>
织梦系统如何插入优酷视频?
查看>>
Discuz设置特定用户组不启用验证码发帖权限
查看>>
百度云服务器 CentOS 图形界面支持
查看>>
为什么要使用R语言?历数R的优势与缺点
查看>>
[小技巧] Linux 下查询图片的大小
查看>>
Linus Torvalds说那些对人工智能奇点深信不疑的人显然磕了药
查看>>
[小技巧] svn: 不能解析 URL
查看>>
USB_ModeSwitch 介绍
查看>>
大公司和小公司的抢人战,孰胜孰负?
查看>>
通过make编译多文件的内核模块
查看>>
如何调试Javascript代码
查看>>
皮克斯宣布开源Universal Scene Description
查看>>
复盘:一个创业项目的失败之路
查看>>
阿里巴巴宣布加入Linux基金会
查看>>
为什么你应该尝试 “全栈”
查看>>