当前位置: 首页 > news >正文

每日一道leetcode

1161. 最大层内元素和 - 力扣(LeetCode)

题目

给你一个二叉树的根节点 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

思路

  1. 仍是采用广度优先搜索,逐层统计各层的元素和,但是过程中需记录深度。
  2. 一开始记录root->val为最大和,往下统计当且仅当当前层大于最大和时更新最大和的值和最大和的深度。
  3. 统计完所有层后返回最大和的深度即可。

代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxLevelSum(TreeNode* root) {queue<TreeNode*> layer1, layer2;int depth = 1, sum = 0, max_depth = 1, maxn;TreeNode* node;layer1.push(root);maxn = root->val;bool flag = true;while(!layer1.empty() || !layer2.empty()) {if(flag) {node = layer1.front();sum += node->val;if(node->left) layer2.push(node->left);if(node->right) layer2.push(node->right);layer1.pop();if(layer1.empty()) {if(maxn < sum) {maxn = sum;max_depth = depth;}flag = !flag;sum = 0;depth++;}}else {node = layer2.front();sum += node->val;if(node->left) layer1.push(node->left);if(node->right) layer1.push(node->right);layer2.pop();if(layer2.empty()) {if(maxn < sum) {maxn = sum;max_depth = depth;}flag = !flag;sum = 0;depth++;}}}return max_depth;}
};

复杂度分析

  • 时间复杂度:每个元素仅涉及一次出入队,时间复杂度为O(n)。
  • 空间复杂度:取决于元素最多的一层的元素数,最差空间复杂度近似于O(n)。

相关文章:

  • 天元证券|奶粉行业结构性回暖 乳企竞速全龄化、国际化
  • java忽略浅拷贝导致bug
  • blender 导出衣服mesh为fbx,随后导入UE5,坐标轴如何保存一致
  • 算法基础(以acwing讲述顺序为主,结合自己理解,持续更新中...)
  • 3.k8s是如何工作的
  • 【Web前端技术】第一节—HTML简介
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第二模块·语法迁移篇 —— 第四章 数据类型:从sizeof到包装类的进化
  • ocr-身份证正反面识别
  • 一个由通义千问以及FFmpeg的AVFrame、buffer引起的bug:前面几帧影响后面帧数据
  • 关于系统架构思考,如何设计实现系统的高可用?
  • FlexRay协议详解:优点、缺点及常用MCU推荐
  • 【HDFS入门】HDFS副本策略:深入浅出副本机制
  • 【Web APIs】JavaScript 操作多个元素 ④ ( 表格全选复选框案例 )
  • 脉冲编码调制(PCM)在三角形信号中的应用
  • 力扣热题100—滑动窗口(c++)
  • 团体程序设计天梯赛L2-008 最长对称子串
  • 前端基础常见的算法
  • 如何实现一个“纯净”的空对象(无原型链属性)?
  • 光谱相机的成像方式
  • 在机器视觉检测中为何选择线阵工业相机?
  • 个体工商户 经营性网站/网站搜索排名查询
  • 网站分页js/近期国际新闻
  • 昆明网站建设kmdtkj/甘肃搜索引擎网络优化
  • 茌平网站建设公司/互联网营销有哪些方式
  • 网络编程就是做网站么/武汉楼市最新消息
  • 专业装修设计网站/三只松鼠网络营销策划书