-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHuffmanTree.java
More file actions
58 lines (50 loc) · 1.57 KB
/
HuffmanTree.java
File metadata and controls
58 lines (50 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package Huffman_Encoder;
public class HuffmanTree {
HuffmanNode root;
public HuffmanTree(HuffmanNode huff) {
this.root=huff;
}
public void printLegend() {
printLegend(root, "");
}
private void printLegend(HuffmanNode t, String s) {
if (t == null) {
return;
}else if(t.letter.length()>1) {
printLegend(t.left, s+"0");
printLegend(t.right, s+"1");
}else{
System.out.println(t.letter + "=" + s);
}
}
public static BinaryHeap legendToHeap(String legend) {
String[] tokens = legend.split(" ");
int n = tokens.length / 2;
HuffmanNode[] nodes = new HuffmanNode[n];
int index = 0;
for (int i = 0; i < tokens.length; i += 2) {
String letter = tokens[i];
Double freq = Double.parseDouble(tokens[i + 1]);
nodes[index++] = new HuffmanNode(letter, freq);
}
return new BinaryHeap<>(nodes);
}
public static HuffmanTree createFromHeap(BinaryHeap b) {
while (b.getSize() > 1) {
HuffmanNode min1 = (HuffmanNode) b.deleteMin();
HuffmanNode min2 = (HuffmanNode) b.deleteMin();
HuffmanNode merged = new HuffmanNode(min1, min2);
b.insert(merged);
}
return new HuffmanTree((HuffmanNode) b.deleteMin());
}
public static void main(String[] args) {
String legend = "A 20 E 24 G 3 H 4 I 17 L 6 N 5 O 10 S 8 V 1 W 2";
BinaryHeap<HuffmanNode> heap = legendToHeap(legend);
System.out.println("Initial Heap:");
heap.printHeap();
HuffmanTree tree = createFromHeap(heap);
System.out.println("Huffman Codes:");
tree.printLegend();
}
}