哈夫曼树是最优二叉树,它是根据一个结点的权值对结点进行排序
这里我们实现的是输入一段文字,程序会根据各个文字出现的频率来获得文字的权重,因为使用的是哈夫曼树来存储,所以在编码时,我们要将使用频率高的编码放在容易找到的位置,所以放在哈夫曼树离根比较近的地方,这样在获得时就更加方便。
代码实现如下:
详细的过程已经在代码里进行注释
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class Operate {
public static void main(String[] args) {
Operate op=new Operate();//创建操作对象
String s=ReaderLine();//获得键盘输入
List<Node> list=new ArrayList<>(); //创建用来存储的结点
list=op.getWightList(s); //获得所有结点的权值
PrintList(list); //打印
Node root = op.createTree(list); //创建哈夫曼树
op.PrintTree(root,1); //打印树
for(int i=0;i<s.length();i++) //输出字符串
if(s.charAt(i)!=' '&&s.charAt(i)!=','&&s.charAt(i)!='.')
System.out.print(s.charAt(i)+" ");
Sy