LeetCode 637. Average of Levels in Binary Tree
2020-05-17 11:13:19 # leetcode

Problem

LeetCode 637. Average of Levels in Binary Tree

1. 题目简述

给出一棵树,每个节点都是signed int类型,计算出每一层的平均值(double类型),将其放入一个list中后返回。例如:

Input:
    3
   / \
  9  20
    /  \
   15   7
Output: [3, 14.5, 11]
Explanation:
The average value of nodes on level 0 is 3,  on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].

2. 算法思路

Queue + BFS

首先,我们要想好用什么方式对树进行遍历,BFS or DFS。这里涉及到层数,一层一层来计算,因此BFS相对更好一些。DFS则需要用Queue来对节点进行存储,问题是怎么样对不同层级来计算,这里在循环每一层之前,用一个size变量来记录当前Queue大小,这个大小就是这一层层级的节点数。

3. 解法

  1. 注意使用变量记录当前界定个数,方便循环。
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

/**
* 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 List<Double> averageOfLevels(TreeNode root) {
List<Double> result = new ArrayList<Double>();

if (root == null) {
return result;
}

Queue<TreeNode> queue1 = new LinkedList<TreeNode>();
queue1.add(root);

while (!queue1.isEmpty()) {
int size = queue1.size();
double sum = 0.0;

for (int i = 0; i < size; i++) {
TreeNode temp = queue1.poll();
if (temp.left != null) {
queue1.offer(temp.left);
}
if (temp.right != null) {
queue1.offer(temp.right);
}
sum += temp.val;
}

result.add(new Double(sum / size));
}

return result;
}
}