这也是个层序遍历的问题
只需要对输出结果求和就可以了,注意求和时要用long类型,不然会过不了大数字的测试
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public static List<List<Integer>> list=new ArrayList<>();
public static List<Double> averageOfLevels(TreeNode root) {
selfTree(root,0);
List<Double> result=new ArrayList<>();
for (List<Integer> integers : list) {
long sum=0;
int num=0;
for (Integer integer : integers) {
sum+=integer;
num++;
}
result.add(Double.valueOf((double) sum /num));
}
list=new ArrayList<>();
return result;
}
public static void selfTree(TreeNode root,int deep){
if(root==null)return;
deep++;
if(list.size()<deep){
List<Integer> cur=new ArrayList<>();
list.add(cur);
}
list.get(deep-1).add(root.val);
selfTree(root.left,deep);
selfTree(root.right,deep);
}
}
大部分就是普通的层序遍历,没什么特殊的