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) {
        // write code here
        if (root == null) {
            return new double[] {};
        }
        LinkedList<Double> linkedList = new LinkedList<>();
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        StringBuffer stringBuffer = new StringBuffer();
        while (!queue.isEmpty()) {
            int size = queue.size();
            int index = 0;
            double total = 0;
            while (index < size) {
                TreeNode node = queue.removeFirst();
                total += node.val;
                index++;
                if (node.left != null) {
                    queue.addLast(node.left);
                }
                if (node.right != null) {
                    queue.addLast(node.right);
                }
            }
            linkedList.add(total / size);
        }
        double[] doubles = new double[linkedList.size()];
        for (int i = 0; i < doubles.length; i++) {
            doubles[i] = linkedList.get(i);
        }
        return doubles;
    }
}

本题主要考察的是二叉树的层序遍历,所用编程语言为java。

只需要知道二叉树的层序遍历,然后将每层结点值求和取平均进行求解