哈夫曼树的创建及编码java

哈夫曼树是最优二叉树,它是根据一个结点的权值对结点进行排序
这里我们实现的是输入一段文字,程序会根据各个文字出现的频率来获得文字的权重,因为使用的是哈夫曼树来存储,所以在编码时,我们要将使用频率高的编码放在容易找到的位置,所以放在哈夫曼树离根比较近的地方,这样在获得时就更加方便。

代码实现如下:

     详细的过程已经在代码里进行注释

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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值