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

剑指Offer|LCR 044.在每个树行中找最大值

LCR 044.在每个树行中找最大值

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

示例 1:

输入: root = [1,3,2,5,3,null,9]
输出: [1,3,9]
解释:
          1
         / \
        3   2
       / \   \  
      5   3   9 

示例 2:

输入: root = [1,2,3]
输出: [1,3]
解释:
          1
         / \
        2   3

示例 3:

输入: root = [1]
输出: [1]

示例 4:

输入: root = [1,null,2]
输出: [1,2]
解释:      
           1 
            \
             2     

示例 5:

输入: root = []
输出: []

提示:

  • 二叉树的节点个数的范围是 [0,104]
  • -231 <= Node.val <= 231 - 1

法1:队列

分析:

初始化变量:当前层数的节点数current,下一层的节点数量next均为0,定义空的queue

root不为空,直接加入队列。current设置为1个结点。

遍历queue,将root出队列,求出当前层次最大值,如果有左右孩子的话,就将左右孩子入队列,孩子是下一层节点,所以next需要++。当current为0的话,说明这一层的结点数遍历完了,所以将max也就是这一层的最大值存入result中,更新一下max、current和next。

var largestValues = function(root) {
    let current = 0; // 当前层数的节点数
    let next = 0; // 下一层的节点数量
    let queue = []; // 用来存放待遍历的节点
    
    if (root !== null) {
        queue.push(root);
        current = 1;
    }

    let result = [];
    let max = -Infinity;
    
	 // 广度优先遍历整个树
    while (queue.length > 0) {
        let node = queue.shift();
        current--;
        max = Math.max(max, node.val);

        if (node.left !== null) {
            queue.push(node.left);
            next++;
        }

        if (node.right !== null) {
            queue.push(node.right);
            next++;
        }

        if (current === 0) {
            result.push(max);
            max = -Infinity;
            current = next;
            next = 0;
        }
    }

    return result;
};

http://www.kler.cn/a/517841.html

相关文章:

  • Mono里运行C#脚本36—加载C#类定义的成员变量和方法的数量
  • Qt监控系统辅屏预览/可以同时打开4个屏幕预览/支持5x64通道预览/onvif和rtsp接入/性能好
  • 【Linux】21.基础IO(3)
  • VSCode下EIDE插件开发STM32
  • 记录让cursor帮我给ruoyi-vue后台管理项目整合mybatis-plus
  • 【含代码】逆向获取 webpack chunk 下的__webpack_require__ 函数,获悉所有的模块以及模块下的函数
  • 【爬虫开发】爬虫开发从0到1全知识教程第12篇:scrapy爬虫框架,介绍【附代码文档】
  • mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看当前数据库是那个,删除数据库,使用数据库;查看当前数据库有哪些表
  • 小南每日 AI 资讯 | 2025年AI泡沫破裂? | 25/01/24
  • uart iic spi三种总线的用法
  • JRE、JVM 和 JDK 的区别
  • 网安加·百家讲坛 | 樊山:数据安全之威胁建模
  • elasticsearch 使用from+size深度分页性能问题解决方案
  • 数据库管理-第287期 Oracle DB 23.7新特性一览(20250124)
  • 【JAVA】获取windows内存使用率排名前十的进程信息、总的cpu和内存使用率
  • iOS swift 后台运行应用尝试失败
  • 第84期 | GPTSecurity周报
  • 2025年01月23日Github流行趋势
  • 日常梳理-网络架构
  • 【重庆市乡镇界】面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移内容测评
  • windows git bash 使用zsh 并集成 oh my zsh
  • 论文速读|SigLIP:Sigmoid Loss for Language Image Pre-Training.ICCV23
  • 【最详细】通过anaconda安装mxnet
  • 【开源免费】基于SpringBoot+Vue.JS贸易行业crm系统(JAVA毕业设计)
  • 2025年美赛F题 网络强大?
  • 【JVM】GC