哈夫曼树

package com.huffman;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author 陈华
 *
 */
public class HahuffmanTree {

	public Node getHaffumanTree(int[] arr) {
		List<Node> list = new ArrayList<Node>();

		for (int i : arr) {
			list.add(new Node(i));
		}
		while (list.size() > 1) {
			Collections.sort(list);
			Node left = list.get(list.size() - 1);
			Node right = list.get(list.size() - 2);
			int weight = left.weight + right.weight;
			Node parent = new Node(weight);
			parent.left = left;
			parent.right = right;
			list.remove(left);
			list.remove(right);
			list.add(parent);
		}
		return list.get(0);
	}

	public void proPrint(Node root) {
		if (root == null) {
			return;
		}
		System.out.println(root.weight);
		proPrint(root.left);
		proPrint(root.right);
	}

	public static void main(String[] args) {
		int[] arr = new int[] { 4, 3, 6, 7, 1, 4, 2, 9 };
			
		HahuffmanTree hahuffmanTree  = new HahuffmanTree();
		Node haffuman = hahuffmanTree.getHaffumanTree(arr);	
		hahuffmanTree.proPrint(haffuman);
	}
}

class Node implements Comparable<Node>{
	Node left ;
	Node right ;
	int weight ;
	
	public Node(int weight) {
		this.weight = weight;
	}

	@Override
	public int compareTo(Node o) {
		return o.weight-this.weight;
	}

	@Override
	public String toString() {
		return "Node [weight=" + weight + "]";
	}
	
	
}

 

全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1151531次浏览 17149人参与
# 通信和硬件还有转码的必要吗 #
11202次浏览 101人参与
# OPPO开奖 #
19200次浏览 267人参与
# 和牛牛一起刷题打卡 #
18971次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203377次浏览 3625人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4972次浏览 30人参与
# 不去互联网可以去金融科技 #
20370次浏览 255人参与
# 通信硬件薪资爆料 #
265901次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2220次浏览 34人参与
# 互联网公司评价 #
97683次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25036次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454864次浏览 5124人参与
# 国企和大厂硬件兄弟怎么选? #
53901次浏览 1012人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14644次浏览 349人参与
# 硬件人的简历怎么写 #
82286次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19397次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28087次浏览 248人参与
# 学历对求职的影响 #
161236次浏览 1804人参与
# 你收到了团子的OC了吗 #
538713次浏览 6386人参与
# 你已经投递多少份简历了 #
344216次浏览 4963人参与
# 实习生应该准时下班吗 #
96976次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63524次浏览 622人参与
牛客网
牛客企业服务