题目

题目来源:力扣(LeetCode)

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

示例 1:

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

思路分析

方法:广度优先搜索

使用广度优先搜索计算二叉树的层平均值。从根节点开始搜索,每一轮遍历同一层的全部节点,计算该层的节点数以及该层的节点值之和,然后计算该层的平均值。

  1. ⽤⼀个⼆维数组来存放每层节点的值,⽤数组下标来标识当前的层级
  2. 举例将每层的值处理成 [[3], [9, 20], [15, 7]] 这样⼀个⼆维数组,然后再计算每层(⼦数组)的平均
    值即可
  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root
  11. * @return {number[]}
  12. */
  13. var averageOfLevels = function (root) {
  14. const stack = [];
  15. const loop = (node, h) => {
  16. if (!node) return;
  17. if (!stack[h]) stack[h] = [];
  18. stack[h].push(node.val);
  19. loop(node.left, h + 1);
  20. loop(node.right, h + 1);
  21. }
  22. loop(root, 0);
  23. return stack.map(i => i.reduce((sum, cur) => sum + cur, 0) / i.length);
  24. };

参考阅读: https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/solution/dai-ma-sui-xiang-lu-wo-yao-da-shi-ge-er-cbxt1/