创建哈弗曼树的首要就是要有思路:
1.要把给定的数组转化成节点数组保存
2.对节点数组进行排序,按升序的方式排列
3.构建哈弗曼树
4.对哈弗曼树进行编码,左0右1
package cn0421hafuman;
public class Hafuman {
/**构建哈弗曼树
* @param args
*/
int[] data;
public Hafuman(int[] date){
this.data=date;
}
//将数组转化成节点数组
public MyNode[] toMyNodeArray(){
MyNode[] nodes=new MyNode[data.length];
for(int i=0;i<nodes.length;i++){
MyNode node=new MyNode();
node.date=data[i];
nodes[i]=node;
}
return nodes;
}
//对节点数组进行冒泡排序(由大到小的循序)
public void maopao(MyNode[] nodes){
for(int i=0;i<nodes.length;i++){
for(int j=i+1;j<nodes.length;j++){
if(nodes[i].date>nodes[j].date){
MyNode tem=nodes[j];
nodes[j]=nodes[i];
nodes[i]=tem;
}
}
}
}
//创建哈弗曼树
public MyNode creatHfmTree(){
MyNode[] nodes = toMyNodeArray();
while(nodes.length>1){
this.maopao(nodes);
MyNode node1=nodes[0];
MyNode node2=nodes[1];
MyNode node3=new MyNode();
node3.date=node1.date+node2.date;
node3.left=node1;
node3.right=node2;
MyNode[] nodes1=new MyNode[nodes.length-1];
nodes1[0]=node3;
for(int i=0;i<nodes.length-2;i++){
nodes1[i+1]=nodes[i+2];
}
//this.maopao(nodes1);
nodes=nodes1;
}
return nodes[0];
}
//打印哈弗曼树
public void printhfm(MyNode node,String code){
if(node.left==null&&node.right==null){
System.out.println(node.date+" code:"+code);
}
else {
if(node.left!=null)
printhfm(node.left,code+"0");
if(node.right!=null)
printhfm(node.right,code+"1");
}
}
}
- 大小: 6.3 KB
分享到:
相关推荐
哈弗曼树,又称最优二叉树,是一种带权路径长度最短的二叉树,由美国计算机科学家哈弗曼在1952年提出,主要用于数据编码,特别是在数据压缩领域有着广泛的应用。哈弗曼树通过构建一个特殊的二叉树结构,可以使得树中...
### 哈弗曼树(Huffman Tree)的构建与C++实现 #### 知识点一:哈弗曼树的基本概念 哈弗曼树,又称最优二叉树,是一种带权路径长度最短的二叉树,在数据压缩、编码等领域有广泛应用。哈弗曼树的构建基于贪心算法...
哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树
哈弗曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树,用于数据编码和解码,尤其在数据压缩领域有着广泛应用。它是由哈弗曼在1952年提出的一种构建方法,旨在最小化带权路径长度(WPL),即树中所有...
在C语言下实现哈弗曼树的创建并进行哈弗曼编码,同时输出哈弗曼编码。
哈弗曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树结构,广泛应用于数据压缩领域。在信息编码中,哈弗曼编码是一种可变长度的前缀编码方式,它根据字符出现频率构建哈弗曼树,使得出现频率高的字符...
哈弗曼编码是一种高效的数据压缩方法,它利用了字符出现频率的不同来构建最优的二叉树,即哈弗曼树。在哈弗曼编码中,出现频率高的字符对应的编码长度较短,反之则较长,从而使得频繁出现的字符在编码过程中占用较少...
哈弗曼树(Huffman Tree),也称为最优二叉树,是数据结构中的一种特殊二叉树,主要用于数据的编码和解码,特别是在文本压缩中起到关键作用。它通过一种贪心策略构建,使得带权路径长度最短,从而达到编码效率最高。...
哈弗曼树(Huffman Tree),也称为最优二叉树,是数据结构中的一种特殊树形结构,主要用于数据编码和解码,特别是用于数据压缩。它通过构建一棵权值最小的二叉树来达到最高效的编码效果。在哈弗曼树中,频率较高的...
在IT领域,哈弗曼树(Huffman Tree)是一种特殊的二叉树,也称为最优二叉树或最小带权路径长度树(Minimum Weighted Path Length Tree)。它在数据压缩、编码优化等方面有广泛应用,比如在文件存储和传输时,通过...
哈弗曼树是一种特殊的二叉树,用于在数据压缩中创建高效的编码方案,尤其是当数据中某些元素出现的频率远高于其他元素时。哈弗曼树的构建过程基于哈夫曼编码,它是一种前缀编码,即任何字符的编码都不会是其他字符...
哈弗曼树,又称最优二叉树或最小带权路径长度树,是一种特殊的二叉树,广泛应用于数据压缩、文件编码等领域。在数据结构课程设计中,使用C语言实现哈弗曼树是一个经典且富有挑战性的任务。下面将详细介绍如何用C语言...
哈弗曼编码是一种高效的数据压缩方法,它利用了字符出现频率的不同来构建最优的二叉树,也称为哈弗曼树。在这个C++程序中,我们将会深入理解哈弗曼编码的原理及其在实际编码过程中的应用。 首先,我们要知道哈弗曼...
哈弗曼树(Huffman Tree)是一种特殊的二叉树,常用于数据编码,特别是在字符压缩和统计中。在这个项目中,“基于哈弗曼树的字符统计”是一个实际应用的数据结构示例,它使用哈弗曼编码技术来分析文本中的字符频率,...
用哈弗曼树进行文件压缩与解压,学习数据结构时可结合进行更深刻理解
哈弗曼树,又称最优二叉树或最小带权路径长度树,是数据结构领域中的一个重要概念,尤其在数据编码和压缩中有着广泛的应用。它是一种特殊的二叉树,其特性是任何节点的两个子节点都是空节点或者权值较小的节点在左,...
在这个课程设计中,我们重点关注的是哈弗曼树(Huffman Tree),一种在数据压缩领域广泛应用的数据结构。哈弗曼树,也称为最优二叉树,是通过哈弗曼编码实现数据压缩的关键工具。 哈弗曼树是一种特殊的二叉树,其...
构造一哈弗曼树并进行哈弗曼编码的源代码。
哈弗曼树,又称霍夫曼树,是一种特殊的二叉树,主要用于数据的高效编码,尤其是在数据压缩领域有着广泛的应用。这种树结构的特点是:树中任一节点的两个子节点都是子树中权值最小的两个节点。权值在这里通常代表字符...