1161. 最大层内元素和

本文探讨了一道经典的二叉树与BFS综合题,旨在寻找二叉树中层内元素之和最大的层号。通过详细的算法解析和C++代码示例,展示了如何使用队列进行广度优先搜索,计算每层节点值的总和,最终确定具有最大层内元素之和的层号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

示例

输入:[1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。

分析

这是一个典型的树与BFS综合题。通过计算树的每一层节点之和,方可回答此题。
此题涉及到了队列的BFS。
队列的作用是不仅要用于计算出当前层的节点值的和,还要保存本层节点孩子的地址。
通过while()循环,算出一层的值。

参考代码

class Solution {
public:
    int maxLevelSum(TreeNode* root) {

        if(root == nullptr) {return 0;}
        //
        int maxlevel = 1 , curlevel = 1 , summax = 1 ;
        queue<TreeNode*> q ;
        q.push(root);
        while(!q.empty())
        {
            int s = q.size();
            int cursum = 0;
            while(s)
            {
                TreeNode* font = q.front();
                q.pop();
                if(font->left != nullptr){q.push(font->left);}
                if(font->right != nullptr){q.push(font->right);}
                cursum += font->val;
                --s;
            }
            if(cursum > summax){maxlevel = curlevel ; summax = cursum ; }
            ++curlevel;
        }
        return maxlevel;
    }
};

欢迎访问我的博客,了解最新动态https://www.mckinleylu.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值