Java实现HuffmanTree
来源:互联网 发布:网络虚拟技术 编辑:程序博客网 时间:2024/05/17 09:16
1.结点类
package edu.tcu.soft.tree;/*结点类*/public class Node{private int weight;// 结点权值private Node parent;// 双亲结点private Node left;// 左孩子结点private Node right;// 右孩子结点public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public Node getParent() {return parent;}public void setParent(Node parent) {this.parent = parent;}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 Node(int weight, Node parent, Node left, Node right) {this.weight = weight;this.parent = parent;this.left = left;this.right = right;}public Node(int weight) { this.left=null; this.right=null; this.parent=null;this.weight = weight;}public Node() {}public int compare(Node o1, Node o2) {return o1.getWeight() - o2.getWeight();}}
2.比较器类
package edu.tcu.soft.tree;import java.util.Comparator;/*权值比较器*/@SuppressWarnings("rawtypes")public class WeightComparator implements Comparator{public int compare(Object o1, Object o2) { Node node1=(Node)o1; Node node2=(Node)o2;return node1.getWeight()-node2.getWeight();}}
package edu.tcu.soft.tree;import java.util.ArrayList;import java.util.Collections;import java.util.List;/*哈夫曼树的实现类*/public class HuffmanTree {private List<Node> list = new ArrayList<Node>();// 构造哈夫曼树@SuppressWarnings("unchecked")public void createTree(int a[]) {// 初始化结点Node node;for (int i = 0; i < a.length; i++) {node = new Node(a[i]);list.add(node);}Collections.sort(list, new WeightComparator());// 将list里最小的两个结点合并for (int n = a.length; n>1; n--) {node = new Node(list.get(0).getWeight() + list.get(1).getWeight(),null, list.get(0), list.get(1));list.remove(0);//移除先前index为0的结点list.remove(0);//移除先前index为1的结点list.add(node);//添加新生成的结点Collections.sort(list, new WeightComparator());//重新排序}node=list.get(0);//获取哈夫曼树的根结点System.out.println("打印所有结点");preOrder(node);//前序遍历哈夫曼树}public void preOrder(Node root) { // -------------------1.递归 if (root == null) { return; } else { System.out.print(root.getWeight() + " ");// 输出结点的数据域 preOrder(root.getLeft()); // 遍历左子树 preOrder(root.getRight());//遍历右子树 }}}
总结:虽然实现了哈夫曼树,但是感觉这种实现的方法的代价很大。每一次通过两个最小的权值获得新的权值后,每一次都要重新排序。待续。。。
0 0
- Java实现HuffmanTree
- Java实现哈夫曼树(HuffmanTree)
- HuffmanTree的实现
- java代码创建HuffmanTree
- HuffmanTree
- HuffmanTree
- HuffmanTree
- HuffmanTree
- HUffmanTree
- dot实现HuffmanTree动态可视化
- 二叉树、HuffmanTree、HuffmanCode的实现
- HuffmanTree的实现及Huffman编码
- HuffmanTree的浅析和在C#中的算法实现
- HuffmanTree的浅析和在C#中的算法实现
- 构造HuffmanTree
- 哈夫曼树HuffmanTree
- 哈夫曼树Huffmantree
- HuffmanTree 改进
- 联想笔记本 切换简体和繁体
- python抓取js加载的数据(phantomjs)
- Android图表库MPAndroidChart(一)——了解他的本质,方能得心应手
- 属性动画ObjectAnimator
- memcache实现消息队列实例
- Java实现HuffmanTree
- JAVA方法参数传递详解
- 在同一台物理机上配置多个ActiveMq主程序
- iOS如何实现录音
- static关键字的用法
- Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
- openlayer绘图时禁止移动地图的两种方式
- memcache压测
- 表变量与临时表的区别和联系