1. 题目考察的知识点

二叉树的遍历,层次遍历

  1. 题目解答方法的文字分析

通过层次遍历以及在层次遍历时先统计本层的TreeNode个数size,然后在每一层的遍历过程中,统计每一层的和sum,然后用队列list装载每一层的平均重量sum/size。因为队列具有先进先出的特点,能够保证层的顺序。最后将平局重量装入double[]即可。

  1. 本题解析所用的编程语言

java

  1. 完整且正确的编程代码
import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return double浮点型一维数组
     */
    public double[] averageOfLevels (TreeNode root) {
        if(root==null)
        return new double[0];
       
        Queue<TreeNode> queue = new LinkedList<>();
        Queue<Double> list= new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
           int size = queue.size();
           int len = queue.size();
           double sum =0.000;
           while(size-- >0){
             TreeNode temp= queue.poll();
             sum+=temp.val;
             if(temp.left!=null){
                queue.offer(temp.left);
             }
             if(temp.right!=null){
                queue.offer(temp.right);
             }
           } 
           list.offer(sum/len);
        }
        double[] ans =new double[list.size()];
        for(int i=0;i<ans.length;i++){
            ans[i] = list.poll();
        }
        
        return ans ;
    }
}