目录结构
1.题目
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例:
输入:
3
/ \
9 20
/ \
15 7
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
提示:
- 节点值的范围在32位有符号整数范围内。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.题解
DFS
dfs对整个二叉树进行遍历,记录每层元素和以及元素个数。
public class Solution637 {
@Test
public void test637() {
TreeNode root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7);
System.out.println(averageOfLevels(root));
}
List<Integer> count = new ArrayList<>();
List<Double> result = new ArrayList<>();
public List<Double> averageOfLevels(TreeNode root) {
dfs(root, 0);
for (int i = 0; i < result.size(); i++) {
result.set(i, result.get(i) / count.get(i));
}
return result;
}
public void dfs(TreeNode root, int h) {
if (root != null) {
if (h < result.size()) {
result.set(h, result.get(h) + root.val);
count.set(h, count.get(h) + 1);
} else {
result.add((double) root.val);
count.add(1);
}
dfs(root.left, h + 1);
dfs(root.right, h + 1);
}
}
}
- 时间复杂度:
- 空间复杂度: