package tree;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class HuffmanTree {
public static void main(String[] args) {
int[] arr = {13, 7, 8, 3, 29, 6, 1};
Node huffmanTree = createHuffmanTree(arr);
preOrder(huffmanTree);
}
public static Node createHuffmanTree(int[] arr){
List<Node> nodeList = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
nodeList.add(new Node(arr[i]));
}
while (nodeList.size() > 1){
Collections.sort(nodeList);
Node leftNode = nodeList.get(0);
Node rightNode = nodeList.get(1);
Node parent = new Node(leftNode.getValue() + rightNode.getValue());
parent.setLeft(leftNode);
parent.setRight(rightNode);
nodeList.remove(leftNode);
nodeList.remove(rightNode);
nodeList.add(parent);
}
return nodeList.get(0);
}
public static void preOrder(Node node){
if(node != null){
node.preOrder();
}else{
System.out.println("根节点为空!");
}
}
}
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;
}
@Override
public String toString() {
return "Node{" +
"value=" + value +
'}';
}
@Override
public int compareTo(Node o) {
return this.value - o.value;
}
public void preOrder(){
System.out.println(this);
if(this.left != null){
this.left.preOrder();
}
if(this.right != null){
this.right.preOrder();
}
}
}