题目描述
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例 1:
输入:
3
/ \
9 20
/ \
15 7
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
提示:
节点值的范围在32位有符号整数范围内。
来源:力扣(LeetCode)
链接:https:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
way1:层序遍历BFS typescript
代码
function averageOfLevels(root: TreeNode | null): number[] {
let result:number[]=[];
if(root==null){
return result;
}
let queue=[root];
while(queue.length>0){
let levelNum:number=queue.length;
let count:number=queue.length;
let sum:number=0;
while(levelNum--){
let top:any=queue.shift();
sum+=top.val;
if(top.left!==null){
queue.push(top.left);
}
if(top.right!==null){
queue.push(top.right);
}
}
let average=sum/count;
result.push(average);
}
return result;
};
way2:广度优先遍历 DFS javascript
- 使用map来记录每层节点个数;
- 使用_result来记录每一层节点的总和;
- 初始调用dfs(root,0),
- 退出递归条件为node==null
- 递归遍历左子树dfs(root.left,level+1)和右子树dfs(root.right,level+1)
- 遍历计算每一层的平均值;
var averageOfLevels = function(root) {
let _result = [],
map = new Map()
function dfs(node, level) {
if (!node) return
map.set(level,(map.get(level) || 0) + 1)
_result[level] = (_result[level] || 0) + node.val
dfs(node.left, level+1)
dfs(node.right, level+1)
}
dfs(root, 0);
for(let i =0;i<_result.length;i++){
_result[i] = _result[i]/map.get(i)
}
return _result
};