【515.在每个树行中找最大值】_二叉树_day02

2024-04-25 20:44

本文主要是介绍【515.在每个树行中找最大值】_二叉树_day02,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 题目描述

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。515.在每个树行中找最大值
在这里插入图片描述

2 解题思路

二叉树层序遍历的拓展:

  1. 借助队列que来解决这个问题,核心点就是在二叉树每一层上进行操作需要记住保存其左右节点之后的队列que的大小len。
  2. 首先创建一个ArrayList列表res用来保存每一层节点中值最大的数。
  3. 判断root是否为空null,为空则直接返回列表res,结束当前函数。非空则进行后续的操作。
  4. 进入条件为队列que非空的当前型循环①,循环①内部:
    1) 记录此时队列que的大小为len, 设置一个用来临时比较的最大值max (MIN_VALUE)
    2)进入循环②内部:
    • 把队列que的节点弹出并赋给新节点node
    • 将node.val赋给一个新的int变量temp
    • max 取max和temp中的最大值
    • node有左右节点则加入队列que中
    • len–
      3)将每一层的max添加至目标res中
  5. 返回最终的结果res

3 代码

public List<Integer> largestValues(TreeNode root) {List<Integer> res = new ArrayList<>();if(root == null) return res;Queue<TreeNode> que = new LinkedList<>();que.offer(root);while(!que.isEmpty()){int len = que.size();int max = Integer.MIN_VALUE;while(len>0){TreeNode node = que.poll();int temp = node.val;max = Math.max(temp,max);if(node.left != null) que.offer(node.left);if(node.right != null) que.offer(node.right);len--;}res.add(max);}return res;}

这篇关于【515.在每个树行中找最大值】_二叉树_day02的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935742

相关文章

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

【C++二分查找】2439. 最小化数组中的最大值

本文涉及的基础知识点 C++二分查找 LeetCode2439. 最小化数组中的最大值 给你一个下标从 0 开始的数组 nums ,它含有 n 个非负整数。 每一步操作中,你需要: 选择一个满足 1 <= i < n 的整数 i ,且 nums[i] > 0 。 将 nums[i] 减 1 。 将 nums[i - 1] 加 1 。 你可以对数组执行 任意 次上述操作,请你返回可以得到的 n

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo

数据结构--二叉树(C语言实现,超详细!!!)

文章目录 二叉树的概念代码实现二叉树的定义创建一棵树并初始化组装二叉树前序遍历中序遍历后序遍历计算树的结点个数求二叉树第K层的结点个数求二叉树高度查找X所在的结点查找指定节点在不在完整代码 二叉树的概念 二叉树(Binary Tree)是数据结构中一种非常重要的树形结构,它的特点是每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构使得二叉树在数据存储和查找等方面具

Differential Diffusion,赋予每个像素它应有的力量,以及在comfyui中的测试效果

🥽原论文要点 首先是原论文地址:https://differential-diffusion.github.io/paper.pdf 其次是git介绍地址:GitHub - exx8/differential-diffusion 感兴趣的朋友们可以自行阅读。 首先,论文开篇就给了一个例子: 我们的方法根据给定的图片和文本提示,以不同的程度改变图像的不同区域。这种可控性允许我们再现

【hdu】I Hate It(线段树,结点修改求区间最大值)

线段树的模板题,还是二分递归。 #include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <set>#include <map>#incl

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

SQL文:求最大值问题

SQL文:求最大值问题 在判定流程中的“一级审理节点”查找最新审批数据 select a.workitemid, a.workitemname, a.endtime, a.processinstid from WFWORKITEM a where a.workitemid in (select max(b.workitemid) from WFWORKITEM b where b.workitem