1. 题目描述

给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。

示例 1:

  1. 输入:
  2. 3
  3. / \
  4. 9 20
  5. / \
  6. 15 7
  7. 输出:[3, 14.5, 11]
  8. 解释:
  9. 0 层的平均值是 3 , 1层是 14.5 , 2层是 11 。因此返回 [3, 14.5, 11]

提示:节点值的范围在32位有符号整数范围内。

2. 解题思路

这道题目实际上就是二叉树的层序遍历。这里使用BFS(广度优先遍历),在遍历的过程中,将每层的节点值保存在队列中,然后将所有值出栈并相加。除以当前层的队列的长度就是这一层的平均值。将其放入结果中。重复上述步骤,直到遍历完整棵二叉树,返回最后的结果。

3. 代码实现

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {number[]}
  11. */
  12. var averageOfLevels = function(root) {
  13. if(!root){
  14. return []
  15. }
  16. const res = []
  17. const queue = []
  18. queue.push(root)
  19. while(queue.length){
  20. const len = queue.length
  21. let sum = 0
  22. for(let i = 0; i < len; i++){
  23. const cur = queue.shift()
  24. sum += cur.val
  25. if(cur.left){
  26. queue.push(cur.left)
  27. }
  28. if(cur.right){
  29. queue.push(cur.right)
  30. }
  31. }
  32. res.push(sum / len)
  33. }
  34. return res
  35. };

4. 提交结果

637. 二叉树的层平均值 - 图1