LeetCode 1161.最大层内元素和:层序遍历

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1161.最大层内元素和:层序遍历相关的知识,希望对你有一定的参考价值。

【LetMeFly】1161.最大层内元素和

力扣题目链接:https://leetcode.cn/problems/maximum-level-sum-of-a-binary-tree/

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。

请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

 

示例 1:

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

示例 2:

输入:root = [989,null,10250,98693,-89388,null,null,null,-32127]
输出:2

 

提示:

  • 树中的节点数在 [1, 104]范围内
  • -105 <= Node.val <= 105

方法一:层序遍历 + 广搜BFS

有关二叉树的层序遍历,之前已经讲过,详细方法可参考 LeetCode 0107.二叉树的层序遍历II の 题解

本题,同样地,我们使用优先队列来对二叉树进行层序遍历。

  • 用变量maxSum记录当前的单层最大和
  • 用变量ans来记录取得maxSum的最小层号
  • 用变量nowLayer记录当前遍历到的层的层号

初始值maxSumint范围内的最小值INT_MINans取任意值即可,nowLayer的值取1

在遍历到某一层时,用一个临时变量thisSum统计这一层的节点值之和

如果这一层遍历结束后,thisSum的值大于之前所记录的最大值maxSum

那么就更新maxSumthisSum,并将ans赋值为当前层号nowLayer

  • 时间复杂度 O ( N ) O(N) O(N),其中 N N N是节点个数。
  • 空间复杂度 O ( N 2 ) O(N2) O(N2),其中 N 2 N2 N2是节点最多的一层的节点数。

AC代码

C++

class Solution 
public:
    int maxLevelSum(TreeNode* root) 
        int maxSum = INT_MIN;
        int ans = -1;
        int nowLayer = 1;
        
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()) 
            int thisLayerNum = q.size();  // 这一层有几个元素
            int thisSum = 0;
            for (int i = 0; i < thisLayerNum; i++) 
                TreeNode* thisNode = q.front();
                q.pop();
                thisSum += thisNode->val;
                if (thisNode->left)
                    q.push(thisNode->left);
                if (thisNode->right)
                    q.push(thisNode->right);
            
            if (thisSum > maxSum) 
                maxSum = thisSum;
                ans = nowLayer;
            
            nowLayer++;
        

        return ans;
    
;

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126082726

以上是关于LeetCode 1161.最大层内元素和:层序遍历的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1161 最大层内元素和[BFS 二叉树] HERODING的LeetCode之路

leetcode-102二叉树的层序遍历

leetcode102. 二叉树的层序遍历

LeetCode Algorithm 102. 二叉树的层序遍历

LeetCode Algorithm 102. 二叉树的层序遍历

leetcode1161