今天我学习了最优二叉树哈夫曼树,java实现哈夫曼树带权路径最小值。
还有哈夫曼树的编码规则:左边每走一次就加0,右边每走一次就加1,最后输出根节点的字符串就是最终编码。代码如下:
public HuffmNode HuffmTree(){
for(int i=0;i<saveValue.length;i++){
HuffmNode ht = new HuffmNode(saveValue[i]);
list.add(getIndex(saveValue[i]),ht);
}
while(list.size()!=1){
HuffmNode node1 = list.remove(0);
HuffmNode node2 = list.remove(0);
HuffmNode newNode = new HuffmNode(node1.getValue()+node2.getValue());
newNode.setLeftNode(node1);
newNode.setRightNode(node2);
list.add(getIndex(newNode.getValue()), newNode);
}
return list.get(0);
}
public void getCode(HuffmNode root,String str){
if(root.getLeftNode()!=null){
getCode(root.getLeftNode(),str+"0");
}
if(root.getRightNode()!=null){
getCode(root.getRightNode(),str+"1");
}
if(root.getLeftNode()==null&&root.getRightNode()==null){
System.out.println(root.getValue()+"哈夫曼树编码为:"+str);
}
}
public int getIndex(int v){
for(int i=0;i<list.size();i++){
int va = list.get(i).getValue();
if(v<=va){
return i;
}
}
return list.size();
}
程序运行结果如下:
做完了,该回去了