1. 程式人生 > >哈夫曼樹的實現

哈夫曼樹的實現

在這裡插入圖片描述

在這裡插入圖片描述

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);
		
	}

}