北京邮电大学复试机试(2)
题目描述 哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。 输入描述: 输入有多组数据。 每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。 输出描述: 输出权值。 示例1 输入 5 1 2 2 5 9 输出 37 思路: 本体实际就是求带权路径长度 import java . util . * ; class Tree { int data ; Tree left ; Tree right ; Tree ( int data ) { this . data = data ; } } public class Main { public static void main ( String [ ] args ) { Scanner input = new Scanner ( System . in ) ; int n = input . nextInt ( ) ; List < Tree > treeList = new ArrayList < Tree > ( ) ; //构建N棵只有一个根节点的树 for ( int i = 0 ; i < n ; i ++ ) { treeList . add ( new Tree