import java.util.*;
public class TestHuffmanTree {
public static void main(String [] args){
HuffmanTree<Integer>hfTree = new HuffmanTree<Integer>();
hfTree.insert(3, 3);
hfTree.insert(2, 2);
hfTree.insert(1, 1);
hfTree.insert(4, 4);
hfTree.insert(6, 6);
hfTree.insert(5, 5);
hfTree.bulidTree();
System.out.println("哈夫曼树前序遍历");
hfTree.preOrder(hfTree.root);
System.out.println("\n哈夫曼树中序遍历");
hfTree.inOrder(hfTree.root);
System.out.println("\n哈夫曼树后序遍历");
hfTree.postOrder(hfTree.root);
}
}
class HuffmanTree<T>{
class Node{
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 Node root;
public Comparator <Node> cmp = new Comparator<Node>(){
public int compare(Node node_1,Node node_2){
return (int) (node_1.weight - node_2.weight);
}
};
PriorityQueue <Node>q= new PriorityQueue<Node>(cmp);
public HuffmanTree(){
root = null;
q.clear();
}
public void insert(T element,int Weight){
Node node = new Node(element,Weight);
q.add(node);
}
public void bulidTree(){
while(q.size() > 1){
Node left = q.poll();
Node right = q.poll();
Node newNode = new Node(null,left.weight+right.weight);
newNode.left = left;
newNode.right = right;
q.add(newNode);
}
root = q.poll();
}
public void preOrder(Node root){
if(root != null){
System.out.print(root.weight+" ");
preOrder(root.left);
preOrder(root.right);
}
}
public void inOrder(Node root){
if(root != null){
inOrder(root.left);
System.out.print(root.weight+" ");
inOrder(root.right);
}
}
public void postOrder(Node root){
if(root != null){
postOrder(root.left);
postOrder(root.right);
System.out.print(root.weight+" ");
}
}
}
Java数据结构之哈夫曼树
最新推荐文章于 2022-09-03 21:15:30 发布