哈夫曼树练习

题目描述

哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。 
输入描述:
输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
输出描述:
输出权值。

输入例子:
5  
1 2 2 5 9

输出例子:
37


要注意哈夫曼树的性质,是所有非叶子节点的权值相加。

代码如下:
import java.util.Arrays;
import java.util.Scanner;

public class 哈夫曼树 {

    public static void main(String[] args) {
        int sum=0;
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int count=in.nextInt();
            int[] num=new int[count];
            for(int a=0;a<count;a++){
                num[a]=in.nextInt();
            }
            Arrays.sort(num);// 排序
//            for(int a=0;a<count;a++){
//                System.out.print(num[a]+" ");
//            }
//            System.out.println();
            switch (count) {
            case 1:
                sum=num[0];
                break;
            case 2:
                sum=num[0]+num[1];
                break;
            default:
                for(int i=0;i<count-1;i++){
                    num[i+1]=num[i]+num[i+1];
                    sum+=num[i+1];
                    Arrays.sort(num, i+1, count);
                }
                break;
            }
                System.out.println(sum);
                sum=0;
            
            
            
        }
        
        
        in.close();

    }
    

}

 


posted @ 2016-07-21 08:44  华不摇曳  阅读(1904)  评论(0编辑  收藏  举报