import java.util.ArrayList;
import java.util.Collections;
/**
* @author Drug
* @create 2020-05-06 16:26
*/
public class HuffmanTree {
public static void main(String[] args) {
int[] arr = { 13, 7, 8, 3, 29, 6, 1 };
Node root = createHuffmanTree(arr);
//测试一把
preOrder(root);
}
public static void preOrder(Node root){
if(root == null ){
System.out.println("空树,无法遍历");
}else{
root.preOrder();
}
}
private static Node createHuffmanTree(int[] arr) {
ArrayList<Node> list = new ArrayList<Node>();
//装进ArrayList
for(int value : arr){
list.add(new Node(value));
}
//生成赫夫曼树
while(list.size() > 1){
Collections.sort(list);
Node leftNode = list.get(0);
Node rightNode = list.get(1);
//生成父节点
Node parentNode = new Node(leftNode.value + rightNode.value);
parentNode.left = leftNode;
parentNode.right = rightNode;
//原来集合删除左右节点,添加父节点
list.remove(leftNode);
list.remove(rightNode);
list.add(parentNode);
}
return list.get(0);
}
}
class Node implements Comparable<Node> {
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
}
@Override
public String toString() {
return "Node{" +
"value=" + value +
'}';
}
/**
* 从小到大排序
* @param o
* @return
*/
@Override
public int compareTo(Node o) {
return this.value - o.value;
}
/**
* 先序遍历
* @param
*/
public void preOrder(){
System.out.println(this);
if(this.left != null){
this.left.preOrder();
}
if(this.right != null){
this.right.preOrder();
}
}
}
java赫夫曼树代码实现(数组转赫夫曼树)
最新推荐文章于 2023-10-29 11:52:21 发布