​LeetCode解法汇总2385. 感染二叉树需要的总时间

news/2025/1/12 20:45:41/

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:. - 力扣(LeetCode)


描述:

给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。

每分钟,如果节点满足以下全部条件,就会被感染:

  • 节点此前还没有感染。
  • 节点与一个已感染节点相邻。

返回感染整棵树需要的分钟数

示例 1:

输入:root = [1,5,3,null,4,10,6,9,2], start = 3
输出:4
解释:节点按以下过程被感染:
- 第 0 分钟:节点 3
- 第 1 分钟:节点 1、10、6
- 第 2 分钟:节点5
- 第 3 分钟:节点 4
- 第 4 分钟:节点 9 和 2
感染整棵树需要 4 分钟,所以返回 4 。

示例 2:

输入:root = [1], start = 1
输出:0
解释:第 0 分钟,树中唯一一个节点处于感染状态,返回 0 。

提示:

  • 树中节点的数目在范围 [1, 105] 内
  • 1 <= Node.val <= 105
  • 每个节点的值 互不相同
  • 树中必定存在值为 start 的节点

解题思路:

首先,构造递归方法,方法的返回值为当前节点是否包含start节点。如果找到start节点,则计算这个节点为出发点的最远路径,这是备选值1。上层递归方法中,分左右节点查询。如果左节点中包含start节点,路径为当前节点右节点的最远路径+start节点和当前节点的层级差,这是备选值2。右节点包含也是类似的原理。持续往上递归,找出所有备选值2。求出所有备选值中最大值即可。

代码:

class Solution {int leafLevel = 0;int maxPath = 0;public int amountOfTime(TreeNode root, int start) {searchStartNode(root, start, 0);return maxPath;}boolean searchStartNode(TreeNode node, int start, int level) {if (node == null) {return false;}if (node.val == start) {maxPath = searchLevel(node, 0) - 1;leafLevel = level;return true;}if (searchStartNode(node.left, start, level + 1)) {maxPath = Math.max(maxPath, leafLevel - level + searchLevel(node.right, 0));return true;}if (searchStartNode(node.right, start, level + 1)) {maxPath = Math.max(maxPath, leafLevel - level + searchLevel(node.left, 0));return true;}return false;}int searchLevel(TreeNode node, int level) {if (node == null) {return level;}level++;return Math.max(searchLevel(node.left, level), searchLevel(node.right, level));}
}


http://www.ppmy.cn/news/1442561.html

相关文章

分布式与一致性协议之Raft算法(一)

Raft算法 概述 Raft算法属于Multi-Paxos算法&#xff0c;它在兰伯特Multi-Paxos思想的基础上做了一些简化和限制&#xff0c;比如日志必须是连续的&#xff0c;只支持领导者(Leader)、跟随者(Follwer)和候选人(Candidate)3种状态。在理解和算法实现上&#xff0c;Raft算法相对…

【神经网络结构可视化】PlotNeuralNet的安装、测试及创建自己的神经网络结构可视化图形

文章目录 前提准备1、下载MikTeX2、下载Git bash3、下载PlotNeuralNet 进行测试1、解压PlotNeuralNet-master.zip2、打开Git bash3、 在my_project中查看生成的pdf文件 创建自己的神经网络结构可视化图形 前提准备 1、下载MikTeX 下载链接&#xff1a; MikTeX ( https://mikt…

flash attention 参数(笔记)

目录 一、flash_attn_varlen_qkvpacked_func 二、flash_attn_varlen_kvpacked_func 三、flash_attn_varlen_func 四、flash_attn_with_kvcache 五、flash_attn_func flash官方 版本: flash-attn 2.5.7 flash-attention/flash_attn/flash_attn_interface.py at main Dao-…

【黑马点评Redis——004达人探店】

1.发布探店笔记 2.点赞 利用Redis中的Set集合来判断是否点赞过。 3.点赞排行榜 可以通过SortedSet来按点赞时间进行排序。 4.好友关注 4.1.关注和取关 4.2.共同关注 可以通过set实现交集的功能 4.3.关注推送 4.3.1 拉模式 拉模式&#xff08;Pull&#xff09;&#x…

mac 桌面不能右键 文件也不见了 但在finder的桌面上有

mac 桌面不能右键 文件也不见了 但在finder的桌面上有 出现该现象&#xff0c;可能是因为安装了带有隐藏桌面文件功能的软件&#xff0c;无意中操作引起的。可以利用终端轻松解决&#xff1a; 1、在Launchpad中找到终端并打开&#xff1a; 2、粘贴如下代码&#xff0c;回车即…

PHP利用phpmailer实现邮件发送功能

要在PHP中实现发送邮件验证码的功能,你需要使用一些特定的库来帮助你处理邮件发送的任务。PHPMailer是一个常用的库,它可以帮助你轻松地发送电子邮件。 以下是一个简单的例子,展示了如何使用PHPMailer库来发送包含验证码的电子邮件: 首先,你需要安装PHPMailer库。你可以通…

Qt相关开源项目总结

Qt官方github&#xff1a; https://github.com/orgs/qt/repositories 参考 https://blog.csdn.net/pzs0221/article/details/131337353

Docker 简单使用及安装常用软件

一、Docker 安装、配置与卸载 1.1、Docker 安装 # 1.安装gcc环境 yum -y install gcc gcc-c && \# 2. 卸载docker旧版本&#xff08;可能之前有安装&#xff09; yum -y remove docker docker-common docker-selinux docker-engine && \# 3. 安装依赖的软件包…