本文实例为大家分享了哈夫曼树java代码,供大家参考,具体内容如下
package boom; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Queue; class Nodeimplements Comparable >{ private T data; private int weight; private Node left; private Node right; public Node (T data,int weight){ this.data = data; this.weight = weight; } public int compareTo(Node 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 getLeft() { return left; } public void setLeft(Node left) { this.left = left; } public Node getRight() { return right; } public void setRight(Node right) { this.right = right; } public String toString(){ return "data:"+this.data+";weight:"+this.weight; } } public class huffuman { static Node create(List > nodes){ while(nodes.size()>1){ Collections.sort(nodes); Node left = nodes.get(nodes.size()-1); Node right = nodes.get(nodes.size()-2); Node parent = new Node (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 List > breadth(Node root){ List > list = new ArrayList >(); Queue > queue = new ArrayDeque >(); queue.offer(root); while(queue.size()>0){ Node 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 > list = new ArrayList >(); list.add(new Node ("a",7)); list.add(new Node ("b",5)); list.add(new Node ("c",4)); list.add(new Node ("d",2)); Node root =huffuman.create(list); System.out.println(huffuman.breadth(root)); // System.out.println(list); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



