使用哈夫曼树对英文文本文档进行编码,java代码
时间: 2023-05-24 21:01:58 浏览: 48
可以使用以下 Java 代码来实现哈夫曼编码:
```java
import java.util.PriorityQueue;
import java.util.Scanner;
public class HuffmanEncoder {
private static class HuffmanNode implements Comparable<HuffmanNode> {
char c;
int freq;
HuffmanNode left;
HuffmanNode right;
public HuffmanNode(char c, int freq, HuffmanNode left, HuffmanNode right) {
this.c = c;
this.freq = freq;
this.left = left;
this.right = right;
}
public boolean isLeaf() {
return left == null && right == null;
}
public int compareTo(HuffmanNode o) {
return freq - o.freq;
}
}
private static void printCodes(HuffmanNode root, String code) {
if (root.isLeaf()) {
System.out.println(root.c + ": " + code);
return;
}
printCodes(root.left, code + "0");
printCodes(root.right, code + "1");
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
int[] freqs = new int[256];
for (int i = 0; i < s.length(); i++) {
freqs[s.charAt(i)]++;
}
PriorityQueue<HuffmanNode> pq = new PriorityQueue<>();
for (int i = 0; i < freqs.length; i++) {
if (freqs[i] > 0) {
pq.offer(new HuffmanNode((char) i, freqs[i], null, null));
}
}
while (pq.size() > 1) {
HuffmanNode left = pq.poll();
HuffmanNode right = pq.poll();
pq.offer(new HuffmanNode('\0', left.freq + right.freq, left, right));
}
HuffmanNode root = pq.poll();
printCodes(root, "");
}
}
```
你可以将文本文档作为输入,程序将打印出每个字符的哈夫曼编码。