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
List<List<Integer>> lists = new ArrayList<>();
levelOrder(root, 0, lists);
double[] ans = new double[lists.size()];
int i = 0;
for (List<Integer> list : lists) {
ans[i++] = (list.stream().mapToInt(v -> v).sum() * 1.0) / list.size();
}
return ans;
}
private void levelOrder(TreeNode root, int level, List<List<Integer>> lists) {
if (root == null) return;
if (level == lists.size()) lists.add(new ArrayList<>());
lists.get(level).add(root.val);
levelOrder(root.left, level + 1, lists);
levelOrder(root.right, level + 1, lists);
}
}
- 根据题意,可以基于二叉树的层序遍历求解。
- 定义一个集合 List<List<Integer>> lists,收集二叉树每一层节点的值,然后遍历 lists 求每一层的平均值