Huffman java 代码实现

来源:互联网 发布:数据结构常用算法 编辑:程序博客网 时间:2024/05/19 14:15
package com.example.huffman;import java.util.ArrayList;import java.util.List;import java.util.PriorityQueue;public class Huffman {List<Node> huffmanCode(List<Node> nodes) {List<Node> temp = new ArrayList<Node>(nodes);PriorityQueue<Node> queue = new PriorityQueue<Node>(nodes);for(int i=0;i<nodes.size()-1;i++){Node l = queue.poll();Node r = queue.poll();Node tempNode = new Node(l,r,"@special",l.freq+r.freq);temp.add(tempNode);queue.add(tempNode);}return temp;}void ergodic(Node node,String str){if(node.l!=null)ergodic(node.l,str+"0");if(node.r!=null)ergodic(node.r,str+"1");if(node.l==null||node.r==null)System.out.println(str+" "+node.keyOrType);}public static void main(String[] args) {List<Node> nodes = new ArrayList<Node>();nodes.add(new Node(null,null,"a",45));nodes.add(new Node(null,null,"b",13));nodes.add(new Node(null,null,"c",12));nodes.add(new Node(null,null,"d",16));nodes.add(new Node(null,null,"e",9));nodes.add(new Node(null,null,"f",5));Huffman h = new Huffman();nodes = h.huffmanCode(nodes);Node node = nodes.get(nodes.size()-1);h.ergodic(node,"");}}class Node implements Comparable<Object>{Node l;Node r;String keyOrType;int freq;public Node(Node l, Node r, String keyOrType, int freq) {this.l = l;this.r = r;this.keyOrType = keyOrType;this.freq = freq;}public Node(){}@Overridepublic int compareTo(Object o) {Node node = (Node) o;return this.freq - node.freq;}@Overridepublic String toString() {return "Node [l=" + l + ", r=" + r + ", keyOrType=" + keyOrType+ ", freq=" + freq + "]";}}

0 0
原创粉丝点击