public CodeMap getHuffmanCodeMap() { HuffmanNode[] array = new HuffmanNode[26]; HuffmanNode tempnode = null; int aval = (int) 'a'; for (int i = 0; i < 26; i++) { array[i] = new HuffmanNode(freq[i]); array[i].setLetter((char) (aval + i)); } Arrays.sort(array); // array is in ascending order based on frequency while (array[1].freq != -64) // Want to get down to one node in array { tempnode = new HuffmanNode((array[0].freq + array[1].freq)); tempnode.setLeft(array[0]); tempnode.setRight(array[1]); array[0] = tempnode; array[1].freq = -64; Arrays.sort(array); } CodeMap map = new CodeMap(); return getCode(array[0], "", map); }
private CodeMap getCode(HuffmanNode node, String code, CodeMap map) { node.code = code; String temp; if (node.left != null) { // Put in a 0 temp = code.concat("0"); getCode(node.left, temp, map); } if (node.right != null) { // Put in a 1 temp = code.concat("1"); getCode(node.right, temp, map); } if (node.right == null && node.left == null) { // Create the CodeMap map.assignCode(node.letter, node.code); } return map; // Shouldn't happen }