哈夫曼樹的實現
阿新 • • 發佈:2018-12-18
package org.sxt.tree; public class Node implements Comparable<Node>{ int value; Node left; Node right; public Node(int value) { this.value=value; } public String toString() { return "Node[value="+value+"]"; } @Override public int compareTo(Node o) { return -(this.value-o.value); } }
package org.sxt.tree; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class TestHuffmanTree { public static void main(String[] args) { int[] arr= {3,7,8,29,5,11,23,14}; Node node=createHuffmanTree(arr); System.out.println(node); } //建立哈夫曼樹 public static Node createHuffmanTree(int arr[]) { //先使用陣列中的所有元素穿建若干二叉樹,只有一個節點 List<Node> nodes=new ArrayList<>(); for(int value:arr) { nodes.add(new Node(value)); } //迴圈處理 while(nodes.size()>1) { //排序 Collections.sort(nodes); //取兩個權值最小的二叉樹 //取最小 Node left=nodes.get(nodes.size()-1); Node right=nodes.get(nodes.size()-2); //建立一顆新二叉樹 Node parent=new Node(left.value+right.value); //把取出來的兩棵二叉樹移除 nodes.remove(left); nodes.remove(right); //將新二叉樹放入二叉樹集合中 nodes.add(parent); } System.out.println(nodes); return nodes.get(0); } }