Java資料結構之哈夫曼樹
阿新 • • 發佈:2019-01-03
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+" "); } } }