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