树节点定义
import java.util.Comparator;
public class Node{
private Node left;
private Integer data;
private Node right;
public Node() {
}
public Node(Integer data) {
this.data = data;
}
public Node(Node left, Integer data, Node right) {
this.left = left;
this.data = data;
this.right = right;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
}
创建huffman树
import java.util.*;
public class HuffmanTree {
public static void main(String[] args) {
Node node0 = new Node(6);
Node node1 = new Node(1);
Node node2 = new Node(3);
Node node3 = new Node(5);
Node node4 = new Node(4);
Node node5 = new Node(7);
List<Node> nodes = new ArrayList<>();
nodes.add(node0);
nodes.add(node1);
nodes.add(node2);
nodes.add(node3);
nodes.add(node4);
nodes.add(node5);
Node huffmanTree = getHuffmanTree(nodes);
System.out.println("按照层次遍历输出哈夫曼树:");
level(huffmanTree);
}
public static Node getHuffmanTree(List<Node> arr) {
while (arr.size()>1){
Node[] nodes = getTowMinWeight(arr);
Node node = new Node();
node.setLeft(nodes[1]);
node.setRight(nodes[0]);
node.setData(nodes[0].getData()+ nodes[1].getData());
arr.remove(arr.size()-1);
arr.remove(arr.size()-1);
arr.add(node);
}
return arr.get(0);
}
public static Node[] getTowMinWeight(List<Node> arr) {
arr.sort(Comparator.comparing(Node::getData).reversed());
Node weights[] = {arr.get(arr.size()-1), arr.get(arr.size()-2)};
return weights;
}
public static void level(Node node) {
ArrayList<Node> list = new ArrayList<>();
list.add(node);
while (list.size() != 0) {
Node firstNode = list.get(0);
System.out.print(firstNode.getData() + " ");
for (int j = 0; j < list.size() - 1; j++) {
list.set(j, list.get(j + 1));
}
list.remove(list.size() - 1);
if (firstNode.getLeft() != null) {
list.add(firstNode.getLeft());
}
if (firstNode.getRight() != null) {
list.add(firstNode.getRight());
}
}
}
}
测试结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201023093711492.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODMzNDMwNg==,size_16,color_FFFFFF,t_70#pic_center)