161.二叉树:在每个树中找最大值(力扣)

代码解决

/**
 * 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:
    vector<int> largestValues(TreeNode* root) 
    {
        queue<TreeNode*> que;  // 定义队列用于层次遍历
        if (root != NULL) que.push(root);  // 如果根节点不为空,则将根节点加入队列
        vector<int> result;  // 声明结果向量,用于存储每层的最大值
        while (!que.empty())  // 当队列不为空时,继续处理
        {
            int size = que.size();  // 获取当前层的节点数量
            int max_val = INT_MIN;  // 初始化当前层的最大值为最小整数
            for (int i = 0; i < size; i++)  // 遍历当前层的每一个节点
            {
                TreeNode* node = que.front();  // 从队列中取出一个节点
                que.pop();  // 将该节点从队列中移除
                max_val = node->val > max_val ? node->val : max_val;  // 更新当前层的最大值
                if (node->left) que.push(node->left);  // 如果该节点有左子节点,将其加入队列
                if (node->right) que.push(node->right);  // 如果该节点有右子节点,将其加入队列
            }
            result.push_back(max_val);  // 将当前层的最大值加入结果向量
        }
        return result;  // 返回结果向量
    }
};

代码是解决“二叉树的最大值”问题的C++代码,这个问题要求返回二叉树中每一层的最大值,并存储在一个向量中。

代码同样使用了广度优先搜索(BFS)的方法。主要思路是使用一个队列来进行层次遍历,在每一层遍历的时候,找出所有节点的最大值,并将其加入结果向量。

这里简要解释一下代码的工作流程:

  1. 初始化一个空的结果向量 result 来存储每层的最大值。
  2. 使用一个队列 que 来进行层次遍历,首先判断根节点是否为空,如果不为空,则将其加入队列。
  3. 当队列不为空时,进行遍历:
    • 获取当前队列的长度,这个长度代表了当前层的节点数。
    • 初始化一个变量 max_val 来存储当前层的最大值,初始设为最小整数 INT_MIN
    • 遍历当前层的每一个节点:
      • 从队列中取出一个节点。
      • 使用当前节点的值更新 max_val
      • 如果这个节点有左子节点或右子节点,将它们加入队列,以便进行下一层的遍历。
    • 将当前层的最大值 max_val 加入结果向量。
  4. 队列为空时,遍历结束,返回结果向量。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储整个树的节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/664162.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FANUC机器人保养服务包,高效又可靠!

发那科机器人作为工业生产中的重要设备&#xff0c;其保养工作至关重要。定期FANUC机械手保养不仅可以延长机器人的使用寿命&#xff0c;还能提高生产效率和质量。 法那科机器人保养步骤&#xff1a; 基本的法兰克机器人保养是维护机器人的第一步&#xff0c;正确的保养步骤还…

Nature Communications|一种超快响应的电子皮肤(柔性压力传感/界面调控/电子皮肤/柔性电子)

南方科技大学郭传飞(Chuan Fei Guo)和中国科学技术大学王柳(Liu Wang)课题组,在《Nature Communications》上发布了一篇题为“Ultrafast piezocapacitive soft pressure sensors with over 10 kHz bandwidth via bonded microstructured interfaces”的论文。论文内容如下…

万字解析线控底盘技术

文章出处&#xff1a;汽车学堂Automooc 引言 在当今这个由科技驱动的时代&#xff0c;汽车电动化、智能化已成为汽车行业的热门话题。特斯拉的自动驾驶功能、蔚来的换电模式、以及比亚迪的刀片电池技术&#xff0c;这些创新不仅引领着市场趋势&#xff0c;也推动着消费者对智…

JVM学习-字节码指令集(四)

异常处理指令 抛出异常指令 athrow指令&#xff1a;在Java程序中显示抛出异常的操作(throw语句)都是由athrow指令来实现除了throw语句显示抛出异常情况之外&#xff0c;JVM规范还规定了许多运行时异常会在其他Java虚拟机指令检测到异常状况时自动抛出&#xff0c;在之前介绍的…

你真的会用收藏夹吗?可道云teamOS收藏夹,竟能缩短多层级文件夹的路径,实现快速访问

在日常工作中&#xff0c;我们时常会面临一个让人头疼的问题&#xff1a;如何在海量的文件和资料中快速找到我们需要的那一份&#xff1f; 尤其是在团队协作中&#xff0c;每个人都在不断地上传、更新文件……导致文件目录层级复杂&#xff0c;搜索也变得繁琐。 这时候&#x…

剖析【C++】——类和对象(下篇)——超详解——小白篇

目录 1.再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 关键字 2. Static成员 2.1 概念 2.2 特性 3. 友元 3.1 友元函数 3.2 友元类 3.3总结&#xff1a; 4. 内部类 1.概念 2.特性 示例代码&#xff1a; 代码分析 3.总结 5.再次理解类和对象 …

vue-esign实现电子签名

导入依赖 pnpm install vue-esign --savesign.vue代码实现 <template><div id"app"><div class"signMask" v-if"autographStatus"><div class"sigh-btns"><button class"btn" type"info&…

mysql中子查询的语法和执行过程

大家好。我们在日常开发过程中&#xff0c;肯定都经常用到了子查询。今天我们就来聊一下mysql中子查询的一些语法以及子查询的执行过程。 一、子查询的语法 首先在开讲之前&#xff0c;我们先创建t1、t2两张表&#xff0c;并分别在表中插入三条数据&#xff0c;方便我们下面内…

269 基于matlab的四连杆机构动力学参数计算

基于matlab的四连杆机构动力学参数计算。将抽油机简化为4连杆机构&#xff0c;仿真出悬点的位移、速度、加速度、扭矩因数、游梁转角等参数&#xff0c;并绘出图形。程序已调通&#xff0c;可直接运行。 269机构动力学参数计算 位移、速度、加速度 - 小红书 (xiaohongshu.com)

校园志愿者|基于SprinBoot+vue的校园志愿者管理系统(源码+数据库+文档)

校园志愿者管理系统 目录 基于SprinBootvue的校园志愿者管理系统 一、前言 二、系统设计 三、系统功能设计 1 系统功能模块 2管理员功能 3志愿者功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&a…

多维时序 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预测

多维时序 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预测 目录 多维时序 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预…

pyinstaller将py文件打包成exe

pyinstaller将py文件打包成exe 一、为什么需要将python文件打包成exe文件?二、具体操作步骤一、为什么需要将python文件打包成exe文件? python文件需要在python环境中运行,也就是需要安装python解释器。有时我们自己写的python程序需要分享给自己的朋友、同事或者合作伙伴,…

【xilinx】vivado中的xpm_cdc_gray.tcl的用途

背景 【Xilinx】vivado methodology检查中出现的critical Warning-CSDN博客 接上篇文章&#xff0c;在vivado进行 methodology检查时出现了严重警告&#xff0c;顺着指示查到如下一些问题 TIMING #1 Warning An asynchronous set_clock_groups or a set_false path (see con…

【SAP HANA 33】前端参数多选情况下HANA如何使用IN来匹配?

场面描述: 在操作界面经常会出现某个文本框需要多选的情况,然后后台需要根据多选的值进行匹配搜索。 一般处理的情况是: 1、在Java后端动态生成SQL 2、不改变动态SQL的情况,直接当做一个正常的参数进行传递 本次方案是第二个,直接当做一个正常的字符串参数进行传递即…

海康威视综合安防管理平台 orgManage/v1/orgs/download 任意文件读取漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…

python对文本操作,生成可执行文件

.exe文件主要包含pingmianF.py文件和read_inp_auto.py文件 实现效果 代码 read_inp_auto.py #-*- coding: utf-8 -*- import re import sys import os import os.path import time import pingmianF from pingmianF import vector import numpy as np from tkinter import me…

SNCScan:针对SAP安全网络通信(SNC)的安全分析与评估工具

关于SNCScan SNCScan是一款针对SAP安全网络通信&#xff08;SNC&#xff09;的安全分析与评估工具&#xff0c;该工具旨在帮助广大研究人员分析SAP安全网络通信&#xff08;SNC&#xff09;&#xff0c;并分析和检测SNC配置与SAP组件中的潜在问题。 SNC系统参数 SNC基础 SAP协…

软件磁盘阵列与LVM

一、软件磁盘阵列 磁盘阵列&#xff08;RAID&#xff09;是通过硬件或软件技术将多个较小的磁盘整合成为一个较大的磁盘设备&#xff0c;而这个较大的磁盘除了存储还具备数据保护功能。 RAID分不同的级别&#xff0c;不同级别具有不同功能&#xff1a; 1、RAID 0&#xff1a;…

摸鱼大数据——select查询7-10

7、union联合查询 union: 对重复数据会去重 union all: 对重复数据不会去重 ​ 注意&#xff1a;union和union all中两边的字段&#xff08;类型、顺序&#xff09;要对应上 示例: use day08; select * from students; ​ select id,name from students where id in (95001,9…

读天才与算法:人脑与AI的数学思维笔记26_读后总结与感想兼导读

1. 基本信息 天才与算法&#xff1a;人脑与AI的数学思维 [英] 马库斯杜索托伊 &#xff08;Marcus du Sautoy&#xff09; 机械工业出版社,2020年4月出版 1.1. 读薄率 书籍总字数284千字&#xff0c;笔记总字数39047字。 读薄率39047284000≈13.7% 1.2. 读厚方向 千脑智…