LeetCode 637 二叉树的层平均值-简单
发布日期:2021-05-09 23:45:23 浏览次数:9 分类:精选文章

本文共 1181 字,大约阅读时间需要 3 分钟。

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

方法思路

为了解决这个问题,我们需要遍历二叉树的每一层,并计算每层的节点平均值。以下是实现该方法的详细步骤:

  • 遍历树的每一层:使用深度优先搜索(DFS)遍历树。每当访问一个节点时,记录它所在的层数。
  • 记录每层的总和和节点数:使用两个辅助数组,一个记录每层的总和,另一个记录每层的节点数。这样可以避免每次都预先分配太多空间,提高效率。
  • 计算每层的平均值:遍历每层,计算每层的平均值,即总和除以节点数。
  • 返回结果数组:将每层的平均值组成一个数组返回。
  • 解决代码

    #include 
    #include
    using namespace std;vector
    averageOfLevels(TreeNode* root) { vector
    cnt; vector
    sum; dfs(root, 0, cnt, sum); vector
    ave; for (int i = 0; i < sum.size(); ++i) { ave.push_back(sum[i] / cnt[i]); } return ave;}void dfs(TreeNode* root, int lev, vector
    & cnt, vector
    & sum) { if (root == nullptr) return; if (lev < sum.size()) { sum[lev] += root->val; cnt[lev] += 1; } else { sum.push_back(static_cast
    (root->val)); cnt.push_back(1); } dfs(root->left, lev + 1, cnt, sum); dfs(root->right, lev + 1, cnt, sum);}

    代码解释

  • averageOfLevels函数:这是主函数,负责调用递归函数并处理结果。它初始化两个向量cntsum,分别记录每层的节点数和总和。
  • dfs函数:这是递归函数,用于深度优先搜索遍历树。每次递归调用时,处理当前节点,根据当前层数更新sumcnt。如果层数超过当前sum的大小,扩展sumcnt,并添加新的层的值。
  • 计算平均值:遍历sumcnt,计算每层的平均值并存储到ave向量中,最终返回这个向量。
  • 该方法确保了每层节点的平均值被正确计算,并且代码高效且易于理解。

    上一篇:LeetCode 257二叉树的所有路径-简单
    下一篇:LeetCode 1122 数组的相对排序-简单-unordered_map容器的应用

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月18日 12时24分00秒