package com.数据结构.树;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Lesson16 {
static List<HuffmanTree> list=new ArrayList<>();
public static void main(String[] args) {
HuffmanTree<Character> huffmanTree33=new HuffmanTree<>('F',33);
list.add(huffmanTree33);
HuffmanTree<Character> huffmanTree45D=new HuffmanTree<>('D',45);
list.add(huffmanTree45D);
HuffmanTree<Character> huffmanTree145=new HuffmanTree<>('A',145);
list.add(huffmanTree145);
HuffmanTree<Character> huffmanTree25=new HuffmanTree<>('G',25);
list.add(huffmanTree25);
HuffmanTree<Character> huffmanTree8=new HuffmanTree<>('P',8);
list.add(huffmanTree8);
HuffmanTree<Character> huffmanTree45E=new HuffmanTree<>('E',45);
list.add(huffmanTree45E);
HuffmanTree<Character> huffmanTree38=new HuffmanTree<>('B',38);
list.add(huffmanTree38);
HuffmanTree<Character> huffmanTree1=new HuffmanTree<>('Z',1);
list.add(huffmanTree1);
HuffmanTree<Character> tree=creatHuffmanTree();
System.out.println(tree.toString());
}
public static HuffmanTree<Character> creatHuffmanTree(){
while(list.size()>1){
Collections.sort(list);
HuffmanTree<String> left = list.get(list.size()-1);
HuffmanTree<String> right = list.get(list.size()-2);
HuffmanTree<Character> parent = new HuffmanTree<>(null, left.weight+right.weight);
parent.left=left;
parent.right=right;
list.remove(list.size()-1);
list.remove(list.size()-1);
list.add(parent);
}
return list.get(0);
}
}
class HuffmanTree<E> implements Comparable<HuffmanTree>{
E root;
double weight;
HuffmanTree<String> left;
HuffmanTree<String> right;
public HuffmanTree(E root, double weight) {
this.root = root;
this.weight = weight;
}
@Override
public String toString() {
return "HuffmanTree{" +
"root=" + root +
", weight=" + weight +
", left=" + left +
", right=" + right +
'}';
}
@Override
public int compareTo(HuffmanTree huffmanTree) {
if(this.weight < huffmanTree.weight){
return 1;
}else if(this.weight > huffmanTree.weight){
return -1;
}
return 0;
}
}