LeetCode第637题:二叉树的层平均值

770 阅读1分钟

题干

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

示例 1:

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

提示:

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

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/av… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法:BFS

我们使用广度优先搜索算法进行层次遍历二叉树,从而计算出每一层的结果集,求得平均值。

大概思路就是使用两个队列,将层的元素放入队列中,在每次进行遍历时记录当前队列的长度,我们只要保持每次循环开始时当前队列就是我们本层的数据集即可。

具体可以看一下代码实现的过程

 var averageOfLevels = function (root) {
     let queue1 = [];
     let queue2 = [];
     if (root == null) {
         return null
     } else {
         queue1.push(root)
     }
     while (queue1.length !== 0) {
        // 记录当前层级的length
         let length = queue1.length;
         let sum = 0
          // 将当前层级的数据一一弹出并且计算总值
         for (let i = 0; i < length; i++) {
             let tempNode = queue1.shift();
             sum += tempNode.val
             if (tempNode.left !== null) {
                 queue1.push(tempNode.left)
             }
             if (tempNode.right !== null) {
                 queue1.push(tempNode.right)
             }
         }
         // 计算平均值
         queue2.push(sum/length)
     }
     return queue2
 };