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];
        }
        LinkedList<TreeNode> linkedList = new LinkedList<>();
        linkedList.add(root);
        ArrayList<Double> list = new ArrayList<>();
        while (!linkedList.isEmpty()) {
            double average = 0.0;
            for (TreeNode treeNode : linkedList) {
                average += treeNode.val;
            }
            list.add(average / linkedList.size());
            int size = linkedList.size();
            while (size-- > 0) {
                TreeNode node = linkedList.poll();
                if (node.left != null) {
                    linkedList.add(node.left);
                }
                if (node.right != null) {
                    linkedList.add(node.right);
                }
            }
        }
        double [] result = new double[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        return result;
    }
}

本题知识点分析:

1.二叉树层序遍历

2.数学求平均

3.集合存取

本题解题思路分析:

1.创建一个链表存储TreeNode节点,一个集合用于存平均值

2.利用层序遍历,在层序遍历同时计算平均值加入到集合中

3.将集合转化为double一维数组返回即可

本题使用编程语言: Java

如果本篇文章对您有帮助的话,可以点个赞支持一下,感谢~