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

2023-10-19 01:52

本文主要是介绍剑指Offer || 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

注意:本题与主站 515 题相同: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

LCR 044. 在每个树行中找最大值 - 力扣(LeetCode)

题解

思路一:DFS,用先序遍历深搜,并用 curHeight来标记遍历到的当前节点的高度。当遍历到 时判断是否更新该层节点的最大值。

代码:

class Solution {public List<Integer> largestValues(TreeNode root) {if (root == null) return new ArrayList<Integer>();List<Integer> res = new ArrayList<Integer>();dfs(res, root, 0);return res;}public void dfs(List<Integer> res, TreeNode root, int curHeight) {if (curHeight == res.size()) //到新的一层,加进来第一个值res.add(root.val);else res.set(curHeight, Math.max(res.get(curHeight), root.val));if (root.left != null) dfs(res, root.left, curHeight + 1);if (root.right != null) dfs(res, root.right, curHeight + 1);}
}

思路二:BFS,层序遍历,一层一层扩展,用 maxVal来标记该层节点的最大值。当前层处理完成之后,maxVal即为当前层的最大值。

代码:

class Solution {public List<Integer> largestValues(TreeNode root) {if (root == null) return new ArrayList<Integer>();List<Integer> res = new ArrayList<Integer>();Queue<TreeNode> queue = new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {int len = queue.size();//当前len确保了len--到0时,刚好处理完当前层int maxVal = Integer.MIN_VALUE;while (len > 0) {TreeNode t = queue.poll();len--;maxVal = Math.max(maxVal, t.val);if (t.left != null) queue.offer(t.left);if (t.right != null) queue.offer(t.right);}res.add(maxVal);}return res;}
}

tips:关于值传递和引用传递。在Java中用的是值传递。在其它方法里面改变引用类型的值都是通过引用改变的,当传递引用对象的时候,传递的是复制的引用的对象句柄,是复制过的,也就是在内存中复制了一个句柄,这两个句柄指向同一个对象,所以改变这个句柄对应的空间的数据会影响到外部的变量虽然是复制的,但是指向的是同一个地址,当你把这个句柄指向其它对象的引用时并不会改变原来的值(例如String),因为用的是复制过的句柄。

这篇关于剑指Offer || 044.在每个树行中找最大值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

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

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

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

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

20190315 把整理和培养自己当作一生的事业,而不是局限在找工作拿offer。

把整理和培养自己当作一生的事业,而不是局限在找工作拿offer,做有本事的人。 来东南读研半年了,明显感觉自己掌握的不过是书本知识级别的中上水平,垃圾收集器这些的只知道背面经,靠脑子硬记,缺乏整理和系统,一头浆糊。 现在一边做实训这个烂项目,一边刷面经,一边刷剑指offer,想投些大公司的实习,又觉得还没准备好,看着各 种面经,都能说个大概,但明显感觉到自己知识的不体系和不深入,**做的项目

【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

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

每个游戏公司的领导都应该看看Supercell的“十年总结”

我知道,你一定会说,Supercell的案例太特殊了。手游出现以来,全世界就只有这么一个Supercell,它的经历、理念和公司架构这些文化,其他公司学不来,不管对中国公司还是海外公司,都没有什么实际借鉴意义。 但Supercell真的有这么“特殊”吗? 比如他们对于留存数据的看重,尤其是测试期留存的看重,和国内——和任何一家常规游戏公司看重留存的态度,都没有什么明显不同。 他们也会试着设立

【简历】25届南京某一本JAVA简历:简历通过率还好,但是拿不到OFFER

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 今天看一份25届南京某一本大学的Java简历。 这个简历呢,学校是一本。我们说上来先要定校招层次,这个层次就按照中厂来讲。因为现在很多的双非一本目标都是在中厂。 这个同学有个实习经历,一本有八成的同学主项目都是重复的。HR他只能看到项目重不重复,要点对不对他不知道,就从这个角度来看,这位同学

所以说读者们才是最优秀的 | 某读者喜提offer(+85%)后的分享

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 这是小编的一个读者喜提offer后在群里做的分享,文中隐藏了读者的个人隐私信息,小编这里把他的面经分享出来供大家学习。  群友们看到后都纷纷表示【我酸了,现在我就是个柠檬精系列】。 小编现在也是个柠檬精????????????????????????????????。 小编现在是群里最菜的了。     关于如何学习/准备面试的总结

剑指offer——替换字符

/*** 剑指offer* 替换字符*/import java.util.Scanner;public class Solution {public String replaceSpace(StringBuffer str) {String s=str.toString();StringBuilder st=new StringBuilder(); for(int i=0;i<s.leng