菜鸟说:哈夫曼树及哈弗曼编码
终于把哈夫曼树及哈弗曼编码弄好了~
?
哈夫曼树就是最优二叉树
?
和上次的搜索二叉树一样,哈夫曼树也有它特定的构造规则:
?
1.要把要存入哈夫曼树的数据分别创建一个树
?
2.把这些树按照大小顺序排序(在Java里面用优先队列PriorityQueue非常方便)
?
3.去两个最小的树,把他们合并在一块儿,并把合并后的树放回队列,如此递归往复……
?
4.把最后剩下的那个树设置为根节点。
?
这样,哈夫曼树就构造完成了~
?
检查方法就是把哈夫曼树的所有叶结点的编码都输出来,向左走编码为0,向右走编码为1(根据自己规定)
?
然后再根据编码把树画出来,检查~
?
首先是节点类:
?
输出的结果为:
?
4的哈夫曼编码为:000
1的哈夫曼编码为:0010
3的哈夫曼编码为:0011
4的哈夫曼编码为:010
5的哈夫曼编码为:011
6的哈夫曼编码为:100
6的哈夫曼编码为:101
6的哈夫曼编码为:110
7的哈夫曼编码为:111
恩~~没有错误~~
?
这样,一个最基本的哈夫曼树就完成了,下面就是利用这个树实现文件的压缩~加油~~~
恩~谢谢指教啦~~