Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.
Example 1:
1
2
3
4
5
6
7
8
9
10 > > 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].
>Note:
- The range of node’s value is in the range of 32-bit signed integer.
题意是想求一颗二叉树每一层节点的平均值。
其实本质上就是一个层次遍历。虽然最后写出了代码,但仍然是在参考了discussion后自己才能明白的。说明对树的深度优先与宽度优先的的确确很陌生了。
宽度优先(BFS)的处理过程大概如下:
- 先将根节点放入队列
- 在队列非空的时候循环
- 每一次循环开始看一下目前的队列有多大,此时的队列大小即是对应这一层的节点数目多少。
- 遍历这一个层次的所有节点,从队列取得值,并且在其左右子树非空的情况下将左右子树放入队列,作为下一层的节点。最后将该节点弹出。
1 | /** |