赫夫曼树的构建

来源:互联网 发布:python解析json字符串 编辑:程序博客网 时间:2024/06/05 14:58
package havermanntree;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;


public class HavermannTreeDemo {
private ArrayList<Node> arrlist;
 

public HavermannTreeDemo(ArrayList<Node> arrlist){
this.arrlist=arrlist;
}

 
public ArrayList<Node> getArrlist() {
return arrlist;
}




public void setArrlist(ArrayList<Node> arrlist) {
this.arrlist = arrlist;
}




/**一般是利用优先级队列来构建赫夫曼树,但这里利用的是集合,每去掉两个元素,添加一个元素后,都得
* 给集合排下序*/
public void sort(){
Collections.sort(arrlist);
}


/**
* 构建赫夫曼树*/
public Node buildTtree(){
sort();
while(arrlist.size()>1){
Node left=arrlist.get(0);
Node right=arrlist.get(1);
Node newNode=new Node(left.getValue()+right.getValue());
newNode.setLeft(left);
newNode.setRight(right);
arrlist.remove(0);
arrlist.remove(0);
arrlist.add(newNode);
//排序
sort();
}
return arrlist.get(0);
}

/**遍历赫夫曼树*/
public void print(Node node){
 if(node!=null){
 print(node.getLeft());
 System.out.print(node.getValue()+" ");
 print(node.getRight());
 }
}
        
public static void main(String[] args) {
 
ArrayList<Node> arrlist=new ArrayList<Node>();
arrlist.add(new Node(1));
arrlist.add(new Node(8));
arrlist.add(new Node(7));
arrlist.add(new Node(6));
arrlist.add(new Node(3));
arrlist.add(new Node(4));
arrlist.add(new Node(5));
HavermannTreeDemo h=new HavermannTreeDemo(arrlist);
Node node=h.buildTtree();
h.print(node);

 
}

}


package havermanntree;public class Node implements Comparable<Node> {private int value;//权值private Node left;//左孩子private Node right;//又孩子public Node(int value){this.value=value;}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public Node getLeft() {return left;}public void setLeft(Node left) {this.left = left;}public Node getRight() {return right;}public void setRight(Node right) {this.right = right;}public int compareTo(Node o) {int result=this.value-o.getValue();return result>0?1:result==0?0:-1;}}


0 0
原创粉丝点击