package com.jiahui.huffmanTree;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author shkstart
* @create 2022-11-17 18:52
*/
public class HuffmanTree {
public static void main(String args[]){
// int[] arry={1,8,5,6,4,2,9,11};
int[] arry={13,7,8,3,29,6,1};
Node node = huffmanTree(arry);
preOrder(node);
}
public static void preOrder(Node o){
if (o!=null){
o.preOrder();
}else {
System.out.println("是空树,不能遍历");
}
}
public static Node huffmanTree(int[] arry){
List<Node> Nodes=new ArrayList<>();
for (int i :arry){
Node temp =new Node(i);
Nodes.add(temp);
}
while (Nodes.size()>1){
Collections.sort(Nodes);
Node one =Nodes.get(0);
Node two=Nodes.get(1);
Node parent =new Node(one.getNumber()+two.getNumber());
parent.setLeft(one);
parent.setRight(two);
Nodes.remove(one);
Nodes.remove(two);//需要注意ArrayList类remove后,后一位的对象直接向前递进
Nodes.add(parent);
}
return Nodes.get(0);
}
}
class Node implements Comparable<Node>{
private int number;
private Node left;
private Node right;
public void preOrder(){
System.out.println(this.getNumber());
if (this.left!=null){
this.left.preOrder();
}
if (this.right!=null){
this.right.preOrder();
}
}
public Node(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
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{" +
"number=" + number +
'}';
}
@Override
public int compareTo(Node o) {
return this.number-o.number;
}
}