二叉树的层平均值(java)
题目
* 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
*
* 示例 :
*
* 输入:
* 3
* / \
* 9 20
* / \
* 15 7
* 输出:[3, 14.5, 11]
* 解释:
* 第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
*/
// @lc code=start
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
解答
import java.util.*;
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
// 生成FIFO队列
Queue<TreeNode> Q = new LinkedList<>();
// 如果结点不为空,那么加入到FIFO队列
if (root != null) {
Q.offer(root);
}
// ans用于保存层次遍历的结果
List<Double> ans = new LinkedList<>();
// 开始利用FIFO队列进行层次遍历
while (Q.size() > 0) {
// 取出当前层里面元素的个数
final int qSize = Q.size();
double tmp = 0;
// 遍历当前层的每个结点
for (int i = 0; i < qSize; i++) {
// 当前层前面的结点先出队
TreeNode cur = Q.poll();
// 把结果累加到tmp中
tmp += cur.val;
// 把下一层的结点入队,注意入队时需要非空才可以入队。
if (cur.left != null) {
Q.offer(cur.left);
}
if (cur.right != null) {
Q.offer(cur.right);
}
}
// 把当前层的结果放到返回值里面。
tmp /= qSize;
ans.add(tmp);
}
return ans;
}
}