leetcode 算法题637 (简单161) 二叉树的层平均值
- 题目介绍
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.
- 示例
输入:
3 / \ 9 20 / \ 15 7
输出: [3, 14.5, 11]
解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].
- 注意
- 节点值的范围在32位有符号整数范围内
- 解法一
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var averageOfLevels = function(root) {
let averages = [], temp = [root];
if(!root) {
return averages;
}
while(temp.length) {
let i = 0, sum = 0, tArray = [];
while(i < temp.length) {
let node = temp[i++];
sum += node.val;
if(node.left) {
tArray.push(node.left);
}
if(node.right) {
tArray.push(node.right);
}
}
averages.push(sum / temp.length);
temp = tArray;
}
return averages;
};
执行用时 : 88 ms, 在所有 JavaScript 提交中击败了96.90%的用户
内存消耗 : 37.7 MB, 在所有 JavaScript 提交中击败了97.06%的用户
- 解法二
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var averageOfLevels = function(root) {
let averages = [], i = 0;
builDaverageArray(root, averages, 0)
while(i < averages.length) {
let j = 0, sum = 0;
while(j < averages[i].length) {
sum += averages[i][j++];
}
averages[i] = sum / averages[i++].length;
}
return averages;
};
const builDaverageArray = (node, averages, depth) => {
if(!node) {
return;
}
if(averages[depth]) {
averages[depth].push(node.val);
} else {
averages[depth] = [node.val];
}
builDaverageArray(node.left, averages, depth + 1);
builDaverageArray(node.right, averages, depth + 1);
}
执行用时 : 84 ms, 在所有 JavaScript 提交中击败了97.67%的用户
内存消耗 : 38.5 MB, 在所有 JavaScript 提交中击败了23.53%的用户