import java.util.TreeSet; import java.util.HashMap; import java.util.ArrayList; import java.util.PriorityQueue; import java.util.Iterator; import java.util.Scanner; public class HuffmanCode { private static ArrayList lists; public static void main (String args []) { Scanner scan = new Scanner (System.in); System.out.println("Input line to compress"); String a = scan.nextLine(); HashMap map = new HashMap(); for (int i = 0; i treeSet = new TreeSet (map.keySet()); ArrayList list = new ArrayList(); System.out.println ("Frequency Count"); for (String s : treeSet) { System.out.println (s + " " + map.get(s)); list.add(s); } System.out.println(); Tree hTree = buildHuffmanTree(map); hTree.outputTree(hTree.getRoot(), 0); HashMap codeMap = generateCodes(hTree, list); TreeSet wCodes = new TreeSet (codeMap.keySet()); System.out.println ("Word Codes :"); for (String s : wCodes) { System.out.println (s + " " + codeMap.get(s)); } System.out.println(); System.out.println ("Huffmann Enconding of : " + a + ":" + encode(a, codeMap)); System.out.println ("Decoded String = " + decode(encode(a, codeMap), hTree)); } public static String decode (String input, Tree t) { return t.getCode(t.getRoot(), input); } public static String encode (String input, HashMap map) { StringBuilder sb = new StringBuilder(); for (int i = 0; i map) { TreeSet treeSet = new TreeSet (map.keySet()); PriorityQueue pQueue = new PriorityQueue(); // a binary heap for (String s : treeSet) { Tree t = new Tree(); t.insertData (map.get(s)); t.getRoot().setValue(s); pQueue.add(t); } System.out.println("Huffman Forest"); Iterator iterator = pQueue.iterator(); while (iterator.hasNext()) { Tree t = iterator.next(); System.out.print (t.getRoot().getValue() + ":" + t.getRoot().getData() + " "); } System.out.println(); while (pQueue.size() > 1) { Tree a = pQueue.poll(); Tree b = pQueue.poll(); Tree c = new Tree(); c.insertData (a.getRoot().getData() + b.getRoot().getData()); c.insertBranch (a.getRoot(), c.getRoot()); c.insertBranch (b.getRoot(), c.getRoot()); String value = a.getRoot().getValue() + b.getRoot().getValue(); c.getRoot().setValue(value); pQueue.add(c); } return pQueue.peek(); } public static HashMap generateCodes (Tree t, ArrayList lists) { HashMap Map = new HashMap(); for (int i = 0; i