序
本文次要记录一下 leetcode 树之二叉树的层平均值
题目
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 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
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
题解
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) {val = x;}
* }
*/
class Solution {public List<Double> averageOfLevels(TreeNode root) {if (root == null) {return Collections.emptyList();
}
List<Double> result = new ArrayList<Double>();
Queue queue = new LinkedList();
queue.offer(root);
while(!queue.isEmpty()) {int size = queue.size();
double sum = 0;
for(int i=0; i< size; i++){TreeNode node = (TreeNode)queue.poll();
sum += node.val;
if (node.left != null) {queue.offer(node.left);
}
if (node.right !=null) {queue.offer(node.right);
}
}
result.add(sum*1.0/size);
}
return result;
}
}
小结
这里借助队列进行档次遍历,每次先记录 queue 的 size,而后按 size 来 poll,取出元素累加 sum,而后把不为 null 的 node.left 及 node.right 放入到 queue 中,最初计算 sum/size 放入到 result 中。
doc
- average-of-levels-in-binary-tree