该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package huffmancode;
import java.util.ArrayList;
public class HuffmanCode{
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add(new HuffmanNode(null,null,"A",0.3f));
list.add(new HuffmanNode(null,null,"B",0.1f));
list.add(new HuffmanNode(null,null,"C",0.35f));
list.add(new HuffmanNode(null,null,"D",0.05f));
list.add(new HuffmanNode(null,null,"E",0.2f));
print(getHuffmanCodeNode(list));
}
public static HuffmanNode getHuffmanCodeNode(ArrayList list){
while(list.size()>=2){
srotNodeListByKey(list);
HuffmanNode newNode=combine2SmallestNode(list.get(0),list.get(1));
list.remove(0);
list.remove(0);
list.add(0,newNode);
}
return list.get(0);
}
public static void print(HuffmanNode node){
System.out.print("丨"+node.getData()+","+node.getPercent()+"丨");
if(node.getLeftN()!=null){
print(node.getLeftN());
}
if(node.getRightN()!=null){
print(node.getRightN());
}
}
public static void srotNodeListByKey(ArrayList list){
for(int i=0;i
for(int j=i=1;j
if(list.get(i).getPercent()>list.get(j).getPercent()){
list.add(i,list.get(j));
list.remove(j+1);
list.add(j,list.get(i+1));
list.remove(i+1);
}
}
}
}
private static HuffmanNode combine2SmallestNode(HuffmanNode leftNode,HuffmanNode rightNode){
HuffmanNode parentNode=new HuffmanNode(leftNode,rightNode,leftNode.getData()+rightNode.getData(),leftNode.getPercent()+rightNode.getPercent());
return parentNode;
}
}
class HuffmanNode{
private HuffmanNode leftN;
private HuffmanNode rightN;
private String data;
private float percent;
public HuffmanNode(HuffmanNode leftN,HuffmanNode rightN,String data,float key){
super();
this.leftN=leftN;
this.rightN=rightN;
this.data=data;
this.percent=key;
}
public float getPercent(){
return percent;
}
public void setPercent(float percent){
this.percent=percent;
}
public HuffmanNode getLeftN(){
return leftN;
}
public void setLeftN(HuffmanNode leftN){
this.leftN=leftN;
}
public HuffmanNode getRightN(){
return rightN;
}
public void setRightN(HuffmanNode rightN){
this.rightN=rightN;
}
public String getData(){
return data;
}
public void setData(String data){
this.data=data;
}
}