数据结构定义:
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例 1:
输入:
3
/ \
9 20
/ \
15 7
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
提示:
节点值的范围在32位有符号整数范围内。
迭代方式:
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> result =new ArrayList<>();
Queue<TreeNode> queue =new LinkedList<>();
TreeNode node;
if(root == null)
return result;
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
Double sum = 0.0;
for(int i = 0;i <size;i++){
node = queue.poll();
sum += node.val;
if(node.left != null)
queue.add(node.left);
if(node.right != null)
queue.add(node.right);
}
result.add(sum / size);
}
return result;
}
}
递归方式:
class Solution {
List<Double> result = new ArrayList<>();
List<Integer> counts = new ArrayList<>();
public List<Double> averageOfLevels(TreeNode root) {
if(root == null)
return result;
dfs(root,0);
for(int i = 0; i < result.size(); i++){
result.set(i,result.get(i) / counts.get(i));
}
return result;
}
private void dfs(TreeNode root,int level){
if(root == null)
return;
if(level >= result.size()){
result.add((double)root.val);
counts.add(1);
}else{
result.set(level,result.get(level) + root.val);
counts.set(level,counts.get(level) + 1);
}
dfs(root.left,level + 1);
dfs(root.right,level + 1);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步