1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<List<Double>> levelSum = new ArrayList<>();
helper(root, 0, levelSum);
List<Double> ans = new ArrayList<>();
for (int i = 0; i < levelSum.size(); i++) {
ans.add(levelSum.get(i).get(0) / levelSum.get(i).get(1));
}
return ans;
}

private void helper(TreeNode node, int level, List<List<Double>> levelSum) {
if (node == null) {
return;
}
if (level == levelSum.size()) {
levelSum.add(new ArrayList<>(Arrays.asList((double) node.val, (double) 1)));
} else {
List<Double> levelList = levelSum.get(level);
levelList.set(0, levelList.get(0) + node.val);
levelList.set(1, levelList.get(1) + 1);
}
helper(node.left, level + 1, levelSum);
helper(node.right, level + 1, levelSum);
}
}

DFS. 把每一个level的sum和count存到list中去. 有个总list存各个level情况(list).

时间复杂度: O(n)
空间复杂度: O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> ans = new ArrayList<>();
if (root == null) {
return ans;
}
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
while (!q.isEmpty()) {
int size = q.size();
double sum = 0, count = 0;
for (int i = 0; i < size; i++) {
TreeNode currNode = q.poll();
sum += (double) currNode.val;
count += 1;
if (currNode.left != null) {
q.offer(currNode.left);
}
if (currNode.right != null) {
q.offer(currNode.right);
}
}
ans.add(sum / count);
}
return ans;
}
}

BFS的解法.