LeetCode 637. 二叉树的层平均值
2019-08-20 本文已影响1人
TheKey_
637. 二叉树的层平均值
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.
示例:
输入:
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/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
-
创建二叉树
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
-
1. 迭代法
- 注意:
在累计同一层的节点的时候,需要先将其转为 double 类型遍历,防止数字较大是溢出和求平均值时精度缺失
public List<Double> averageOfLevels(TreeNode root) {
List<Double> list = new ArrayList<>();
if (root == null) return list;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int size = queue.size();
int sum = size;
double res = 0;
while (size > 0) {
TreeNode cur = queue.poll();
res += (double) cur.val;
if (cur.left != null) queue.add(cur.left);
if (cur.right != null) queue.add(cur.right);
size--;
}
list.add( res / sum);
}
return list;
}
复杂度分析:
- 时间复杂度:O(n), 每个节点都需要遍历一次
- 空间复杂度:O(n), 创建的队列的空间大小,也就是节点数量
-
源码
-
我会每天更新新的算法,并尽可能尝试不同解法,如果发现问题请指正
- Github