package DataStructures.huffmantree;
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};
// createHuffmanTree(arr);
preOrder(createHuffmanTree(arr));
}
//前序遍历
public static void preOrder(Node node){
if (node != null){
node.preOrder();
} else {
System.out.println("该哈夫曼树为空!");
}
}
//创建哈夫曼树
public static Node createHuffmanTree(int[] arr){
//1.遍历数组
//2.将每个数组元素构建为Node
//3.将Node放入到ArrayList中
List<Node> nodeList = new ArrayList<Node>();
for(int value: arr){
nodeList.add(new Node(value));
}
while (nodeList.size() > 1) {
//排序
Collections.sort(nodeList);
// System.out.println(nodeList);
Node leftNode = nodeList.get(0);
Node rightNode = nodeList.get(1);
//构建新二叉树
Node parent = new Node(leftNode.value + rightNode.value);
parent.left = leftNode;
parent.right = rightNode;
//从ArrayList中删除0,1
nodeList.remove(leftNode);
nodeList.remove(rightNode);
//将parent加入到nodeList
nodeList.add(parent);
}
return nodeList.get(0);
}
}
//创建节点类
class Node implements Comparable<Node>{
int value;
Node left;
Node right;
//前序遍历
public void preOrder(){
System.out.println(this);
if(this.left != null){
this.left.preOrder();
}
if (this.right != null){
this.right.preOrder();
}
}
public Node(int value){
this.value = value;
}
@Override
public String toString() {
return "Node{" +
"value=" + value +
'}';
}
@Override
public int compareTo(Node o) {
return this.value - o.value;
}
}
哈夫曼树(Java)
最新推荐文章于 2024-04-13 13:01:36 发布