赫夫曼树的构建
来源:互联网 发布: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);
}
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
- 赫夫曼树的构建
- 赫夫曼树的构建
- 我的构建赫夫曼树代码
- 赫夫曼树的构建、编码、译码解析
- 构建软件的方法
- 嵌入式系统的构建
- 构建自己的库
- 自动构建的脚本
- 构建Filter的知识
- OBBTree的构建
- SOA的构建原则
- 词库的构建
- 嵌入式系统的构建
- 用迭代器构建的单链表
- 拟构建的知识结构
- 不规则数组的构建
- RPM包的构建
- Roller 工程的构建
- R语言编程艺术学习笔记(快速入门、向量)
- spice中视频处理相关
- cs
- Android Service 两种启动方式的区别
- TabHost 内嵌 Fragment的跳转
- 赫夫曼树的构建
- Android Binder 简单实例
- java下载excel
- 高性能网络编程(一)----accept建立连接
- 什么样的工作可以让程序员年薪高达50万美元?
- Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)
- AutoCompleteTextView实现邮件地址自动填充
- making sense of multitouch
- 压缩目录