前言
和前几天的一样,dfs或者bfs。深度需要两个分别记录每层的count和每层的sum。广度利用层序遍历思想和前几天的题目大同小异
题目
源码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
//广度优先
// List<Double>ans=new ArrayList<Double>();
// Queue<TreeNode> queue =new LinkedList<>();
// queue.offer(root);
// while(!queue.isEmpty()){
// int size=queue.size();
// double sum =0;
// for(int i=0;i<size;i++){
// TreeNode node=queue.poll();
// sum+=node.val;
// TreeNode left=node.left,right=node.right;
// if(left!=null){
// queue.offer(left);
// }
// if(right!=null){
// queue.offer(right);
// }
// }
// ans.add(sum/size);
// }
// return ans;
// 深度优先
List<Integer> count =new ArrayList<>();
List<Double>sum=new ArrayList<>();
List<Double>ans=new ArrayList<>();
dfs(root,0,count,sum);
for(int i=0;i<sum.size();i++){
ans.add(sum.get(i)/count.get(i));
}
return ans;
}
public void dfs(TreeNode node,int level,List<Integer> count,List<Double> sum){
if(node==null){
return;
}
if(level<sum.size()){
sum.set(level,sum.get(level)+node.val);
count.set(level,count.get(level)+1);
}else{
sum.add(1.0*node.val);
count.add(1);
}
dfs(node.left,level+1,count,sum);
dfs(node.right,level+1,count,sum);
}
}