java哈夫曼树实例代码_java

本文实例为大家分享了哈夫曼树java代码,供大家参考,具体内容如下

package boom;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Queue;

class Node<T> implements Comparable<Node<T>>{
  private T data;
  private int weight;
  private Node<T> left;
  private Node<T> right;

  public Node (T data,int weight){
    this.data = data;
    this.weight = weight;
  }

  public int compareTo(Node<T> other) {
    if(this.weight > other.getWeight()){
      return -1;
    }if(this.weight < other.getWeight()){
      return 1;
    }
    return 0;
  }

  public T getData() {
    return data;
  }

  public void setData(T data) {
    this.data = data;
  }

  public int getWeight() {
    return weight;
  }

  public void setWeight(int weight) {
    this.weight = weight;
  }

  public Node<T> getLeft() {
    return left;
  }

  public void setLeft(Node<T> left) {
    this.left = left;
  }

  public Node<T> getRight() {
    return right;
  }

  public void setRight(Node<T> right) {
    this.right = right;
  }  

  public String toString(){
    return "data:"+this.data+";weight:"+this.weight;
  }
}

public class huffuman<T> {
  static <T> Node<T> create(List<Node<T>> nodes){
    while(nodes.size()>1){
      Collections.sort(nodes);
      Node<T> left = nodes.get(nodes.size()-1);
      Node<T> right = nodes.get(nodes.size()-2);
      Node<T> parent = new Node<T>(null,left.getWeight()+right.getWeight());
      parent.setRight(right);
      parent.setLeft(left);
      nodes.remove(left);
      nodes.remove(right);
      nodes.add(parent);
    }
    return nodes.get(0);
  }
  static<T> List<Node<T>> breadth(Node<T> root){
    List<Node<T>> list = new ArrayList<Node<T>>();
    Queue<Node<T>> queue = new ArrayDeque<Node<T>>();
    queue.offer(root);
    while(queue.size()>0){
      Node<T> out = queue.poll();
      list.add(out);
      if(out.getLeft()!=null){
        queue.offer(out.getLeft());
      }
      if(out.getRight()!=null){
        queue.offer(out.getRight());
      }
    }
    return list;
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<Node<String>> list = new ArrayList<Node<String>>();
    list.add(new Node<String>("a",7));
    list.add(new Node<String>("b",5));
    list.add(new Node<String>("c",4));
    list.add(new Node<String>("d",2)); 

    Node<String> root =huffuman.create(list);
    System.out.println(huffuman.breadth(root));
//   System.out.println(list);
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
哈夫曼树
java实例代码、java多线程实例代码、java面向对象代码实例、java源代码实例、java经典实例 源代码,以便于您获取更多的相关知识。

时间: 2024-08-01 15:34:05

java哈夫曼树实例代码_java的相关文章

求一段可以打印哈夫曼树的代码,能够在执行时看到的,谢谢!!

问题描述 求一段可以打印哈夫曼树的代码,能够在执行时看到的,谢谢!! 求一段可以将我写的哈夫曼树打印出来的代码,谢谢!!我正在写一个huffman的编码和译码的程序可是不会写打印的,请大家帮忙 解决方案 http://blog.csdn.net/creazyapple/article/details/7948207http://blog.csdn.net/skyline0623/article/details/6023443 解决方案二: 注意调用方法,把指向树的指针传给第二个函数: void

Java实现FTP服务器功能实例代码_java

FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download).FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录.列文件目录.设置传输参数及传送文件等.使用FTP可以传送所有类型的文件,如文本文件.二进制可执

Java实现邮箱找回密码实例代码_java

通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 2.参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url. 需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 邮箱  3.加密能防

java 实现约瑟夫环的实例代码_java

复制代码 代码如下: import java.io.BufferedInputStream;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Josephus {    private static class Node{        int No;        Node next;        public Node(int No){            this

java多线程复制文件的实例代码_java

复制代码 代码如下:  package com.test; import java.io.FileNotFoundException;  import java.io.IOException;  import java.io.RandomAccessFile;  public class FileCoper {      private static final String _ORIGIN_FILE_MODE = "r";              private static fi

Java批量修改文件名的实例代码_java

复制代码 代码如下: import java.io.*; import java.util.*;public class Test {     public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new FileReader("output1.txt"));        List<String> newName =

Java自动解压文件实例代码_java

复制代码 代码如下: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public cl

java实现MD5加密算法的实例代码_java

复制代码 代码如下: package other; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/* * MD5 算法*/public class MD5 {     // 全局数组    private final static String[] strDigits = { "0", "1", "2", "3"

Java使用JDBC连接Oracle_MSSQL实例代码_java

一.Statement 复制代码 代码如下: import java.sql.*; public class TestJDBC {  public static void main(String[] args) {  Connection oracle_conn = null;  Statement oracle_stmt = null;  ResultSet oracle_rs = null;   Connection mssql_conn = null;  Statement mssql_s