用java写一个具有以下功能的代码: (1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmTree中。
时间: 2023-02-06 08:54:20 浏览: 180
哈夫曼树应用 从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上;
4星 · 用户满意度95%
以下是一个使用 Java 实现初始化并建立哈夫曼树的代码示例:
```
import java.util.*;
import java.io.*;
public class HuffmanTree {
// 结点类
private static class Node implements Comparable<Node> {
// 字符
char ch;
// 权值
int weight;
// 左右子树
Node left, right;
Node(char ch, int weight) {
this.ch = ch;
this.weight = weight;
}
public int compareTo(Node o) {
// 实现以权值为第一关键字的排序
return this.weight - o.weight;
}
}
public static void main(String[] args) throws IOException {
// 从终端读入字符集大小 n
Scanner scan = new Scanner(System.in);
System.out.print("请输入字符集大小 n:");
int n = scan.nextInt();
// 创建一个 List 来存储字符和权值
List<Node> nodes = new ArrayList<>();
for (int i = 0; i < n; i++) {
System.out.print("请输入字符:");
char ch = scan.next().charAt(0);
System.out.print("请输入权值:");
int weight = scan.nextInt();
nodes.add(new Node(ch, weight));
}
// 建立哈夫曼树
while (nodes.size() > 1) {
// 按照权值从小到大排序
Collections.sort(nodes);
// 取出权值最小的两个结点
Node left = nodes.remove(0);
Node right = nodes.remove(0);
// 将它们合并成一个新结点
Node parent = new Node('\0', left.weight + right.weight);
parent.left = left;
parent.right = right;
// 将新结点加入到列表中
nodes.add(parent);
}
// 哈夫曼树建立完毕,根结点存在 nodes 列表的唯一元素中
Node root = nodes.
阅读全文