week19-leetcode #637-AverageofLevelsinBinaryTree

week19-leetcode #637-AverageofLevelsinBinaryTree

链接:https://leetcode.com/problems/average-of-levels-in-binary-tree/description/

Question

Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.

Example

Input:
    3
   / \
  9  20
    /  \
   15   7
Output: [3, 14.5, 11]
Explanation:
The average value of nodes on level 0 is 3,  on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].

Note

  1. The range of node’s value is in the range of 32-bit signed integer.

Solution

#include <queue>
using namespace std;

// DFS
class Solution {
public:
  vector<double> averageOfLevels(TreeNode* root) {
    if (root == NULL) return vector<double>();
    int level = 1;
    // 层数通过递归的形式进行传递
    cal_average(root, level);
    for (auto index = 0; index < sum.size(); index++) {
      average.push_back(sum[index]/count[index]);
    }
    return average;
  }

  // 采用先序遍历加入
  void cal_average(TreeNode* root, int level) {
    if (root == NULL) return;
    // 第一次来到这一层
    if (count.size() < level) {
      count.push_back(1);
      sum.push_back(root->val);
    } else {
      count[level-1]++;
      sum[level-1] += (root->val);
    }
    if (root->left)
      cal_average(root->left, level+1);
    if (root->right)
      cal_average(root->right, level+1);
  }

private:
  // 标记每一个level的和
  vector<double> sum;
  // 标记每一个level的个数
  vector<int> count;
  vector<double> average;
};

思路:维护全局的数组sum和count,sum为各层的节点值总和,count为各层的节点个数。采用DFS遍历一遍,获得各层的节点个数和节点值总和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值