leetcode2385. 感染二叉树需要的总时间(java)

news2024/11/16 1:26:12

感染二叉树需要的总时间

  • 感染二叉树需要的总时间
  • 递归 + dfs
    • 代码演示
  • 二叉树专题

感染二叉树需要的总时间

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/amount-of-time-for-binary-tree-to-be-infected

给你一棵二叉树的根节点 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 的节点

递归 + dfs

分析起始节点,如果这个节点是头节点,那么感染整棵树的时间就是,树的总高度减一,也就是左右子树的最大高度,
如果起始节点不是头节点,那么感染整棵树需要的时间就是,从这个节点到根节点,在从根节点到另外一颗子树的距离,即根结点与起始节点的高度差 + 根结点另一颗子树的高度。
因为要感染整棵树,上面两种情况都会进行,取最大值就行了.

代码演示

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int ans = 0;    // 最短用时
    int depth = -1; // 起始节点的高度
    
    public int amountOfTime(TreeNode root, int start) {
        dfs(root, 0, start);
        return ans;
    }
    /**
    * level 来到节点的层级 root为0 依次相加
    * start起始节点
    */
    int dfs(TreeNode root, int level, int start) {
       if(root == null){
           return 0;
       }
       //如果相等,当前节点的深度就是level
       if(root.val == start){
           depth = level;
       }
       //遍历左树
       int l = dfs(root.left,level + 1,start);
       //判断起始位置是否在左树上
       boolean inLeft = depth != -1;
       int r = dfs(root.right,level + 1,start);
       //如果来到起始节点,当前节点感染自己子树需要的时间
       if(root.val == start){
           ans = Math.max(l,r);
       }else if(inLeft){
       //起始节点在左子树上 ,depth - level 代表当前节点到起始点的距离 加右子树高度
           ans = Math.max(ans,depth - level + r);
       }else{
         //起始节点在右子树上 ,depth - level 代表当前节点到起始点的距离 加左子树高度
           ans = Math.max(ans,depth - level + l);
       }
       //返回树的高度
       return Math.max(l,r) + 1;
    }


}

二叉树专题

leetcode222. 完全二叉树的节点个数

leetcode199. 二叉树的右视图

leetcode109. 有序链表转换二叉搜索树

leetcode652. 寻找重复的子树

leetcode450. 删除二叉搜索树中的节点

leetcode98. 验证二叉搜索树

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一练 | 华为认证真题练习Day60

1、启用GRE的keepalive功能后&#xff0c;GRE隧道的本端会周期性的每10s向对端发送一次keepalive报文。 A. 对 B. 错 2、AAA协议是RADIUS协议。 A. 对 B. 错 3、路由器Radius信息配置如下&#xff1a;下列说法正确的有&#xff1f;&#xff08;多选&#xff09; A. 计费服务…

[Spring Cloud]:学习笔记·(一)

文章目录 摘要1 认识微服务1.1 单体架构与分布式架构1.2 分布式架构与微服务1.3 微服务架构 摘要 摘要&#xff1a;分布式&#xff1b;微服务&#xff1b;springcloud 1 认识微服务 1.1 单体架构与分布式架构 架构方式解释优点缺点单体架构将业务所有功能集中在一个项目中开…

java从入门到起飞(二)——运算符

目录 前提——运算符概念算数运算符注意事项&#xff1a;字符的“”操作字符串的“”操作 赋值运算符注意事项&#xff1a; 自增自减运算符注意事项&#xff1a; 关系运算符注意事项&#xff1a; 逻辑运算符短路逻辑运算符注意事项&#xff1a; 三元运算符计算规则&#xff1a;…

OpenCV Mat类

文章目录 Mat类Mat类数据类型读取Mat类支持的运算OpenCV Mat数据类型指针ptr的使用多维矩阵创建 Mat类 Mat类数据类型读取 S 有符号整型 U 无符号整型 F 浮点型CV_8U - 8位无符号整数&#xff08;0…255&#xff09;CV_8S - 8位有符号整数&#xff08;-128…127&#xff…

Python基础(1)——Python简介

Python基础&#xff08;1&#xff09;——Python简介 文章目录 Python基础&#xff08;1&#xff09;——Python简介目标Python介绍Python版本总结 目标 了解PythonPython的应用领域Python的版本 Python介绍 Python是时下最流行、最火爆的编程语言之一&#xff0c;具体原因如…

SAP从入门到放弃系列之BOM组-Part1

目录 BOM组两种模式&#xff1a; 创建BOM的方式 方式一&#xff1a;直接在每个工厂分别创建BOM。 方式二&#xff1a;创建BOM组&#xff0c;然后每个工厂参考创建 方式三&#xff1a;创建BOM组&#xff0c;每个工厂参考创建&#xff0c;针对有特殊的工厂复制BOM组后进行调…

人机交互学习-9 以用户为中心的设计

以用户为中心的设计 以用户为中心的设计思想工程设计过程的三个假设以人为本设计思想三个方面的假设以用户为中心的设计四原则UDC项目包含的方法 用户参与设计用户参与的重要性选择哪些用户&#xff1f;为什么要让用户参与&#xff1f; 用户参与的形式参与式设计PICTIVECARD 理…

Nacos-手写注册中心基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明需求分析核心功能代码实现AService模块BService模块NacosService模块NacosSDK模块 注意事项总结提升 概念说明 注册中心是微服务架构中的纽带&#xff0c;类似于“通讯录”&#xff0c;它记录了服务和服务地址的映射关系。在分布…

香蕉派(Banana Pi) BPI-M2 Zero 评测试,与树莓派 Zero同尺寸的开发板

Banana Pi M2 Zero 是一款微型计算机&#xff0c;配备四核处理器并内置 Wi-Fi 和蓝牙。这是一款非常适合基本计算任务甚至轻度游戏的小型设备。在这篇评论中&#xff0c;我们将了解 M2 Zero 的性能、功能和价值。 什么是 Banana Pi BPI-M2 Zero Banana Pi M2 Zero 是由深圳公…

MongoDB(Windows版)安装

首先需要下载 官网&#xff1a;MongoDB: The Developer Data Platform | MongoDB 安装过程 需要安装的版本 第一步&#xff1a;安装时&#xff0c;Custom是指可以自定义安装路径&#xff0c;然后傻瓜式安装即可&#xff08;注意&#xff1a;先不要安装图形化工具&#xff0…

2023-06-17 LeetCode每日一题(分割圆的最少切割次数)

2023-06-17每日一题 一、题目编号 2481. 分割圆的最少切割次数二、题目链接 点击跳转到题目位置 三、题目描述 圆内一个 有效切割 &#xff0c;符合以下二者之一&#xff1a; 该切割是两个端点在圆上的线段&#xff0c;且该线段经过圆心。该切割是一端在圆心另一端在圆上…

【Vue】学习笔记-Vue Router activated deactivated 路由守卫

Vue Router activated deactivated 路由守卫 activated deactivated路由守卫1.全局守卫2.独享守卫3.组件内守卫全局路由守卫路由器的两种工作模式 activated deactivated activated 和 deactivated 是路由组件所独有的两个钩子&#xff0c;用于捕获路由组件的激活状态 具体使用…

管理类联考——英语——趣味篇——阅读——考题的来源

Part One考研英语阅读——Part A 1.卫报 《卫报》( The Guardian)是英国的全国性综合内容日报。与《泰晤士报》、《每日电讯报》被合称为英国三大报。由约翰爱德华容泰勒创办于1821年5月5日。该报注重报道国际新闻&#xff0c;擅长发表评论和分析性专题文章。一般公众视《卫报…

【数据分析之道-Matplotlib(九)】Matplotlib棉棒图

文章目录 专栏导读1、Matplotlib棉棒图stem()基本语法2、Matplotlib棉棒图stem()定义样式2.1linefmt参数2.2markerfmt参数2.3举例一&#xff1a;直线样式2.4举例二&#xff1a;圆点样式 3、棉棒图案例实战3.1绘制每月销量的棉棒图3.2绘制每月销量与平均销量之差 专栏导读 ✍ 作…

Prometheus介绍安装和快速入门

Prometheus介绍安装和快速入门 1、Prometheus介绍 1.1 什么是 Prometheus? Prometheus&#xff08;普罗米修斯&#xff09;是古希腊的一个神明&#xff0c;名字的意思是「先见之明」。从它的名字可以看出&#xff0c; Prometheus 是做「先见之明」的监控告警用途。维基百科…

HJ26 字符串排序

题目&#xff1a; HJ26 字符串排序 题解&#xff1a; 规则 1 &#xff1a;英文字母从 A 到 Z 排列&#xff0c;不区分大小写。 统一转换&#xff0c;通过减去对应字母的起始值&#xff0c;得到一个相对值&#xff0c;抹平大小写&#xff0c;例如&#xff1a;B - A&#xff…

【Java项目】使用LruCache提高DSP广告主需求方 (Demand Side Platform)系统性能

文章目录 背景LruCache简介LruCache在DSP系统中的应用场景LruCacheRedis增加LruCache数据过期清除机制ConcurrentHashMapLruCache零拷贝机制 源码 背景 我之前工作的一家公司是一家传媒公司&#xff0c;公司的主要盈利方式为在公司项目中接入广告&#xff0c;以及自媒体广告宣…

Windows下编译安装Acise

Acise是济南友泉软件公司自主研发的一套跨平台的通用CAx(CAD/CAE)软件开发框架&#xff0c;本文旨在记录Windows下编译安装Acise的流程。 零、系统环境 操作系统Windows 10编译器Visual Studio 2019 CommunityCMake2.24.2Boost1.80.0Qt5.14.0OpenCASCADE7.6.0VTK9.0.0 一、依…

Linux之线程安全(下)

文章目录 前言一、Linux线程互斥1.mutex的理解锁原子性互斥锁实现原子性的原理 2.mutex的封装——Mutex.hpp3.可重入和线程安全可重入线程安全线程安全不一定是可重入的&#xff0c;而可重入函数一定是线程安全的。 4.死锁概念造成死锁的四个必要条件如何避免死锁 二、Linux线程…

Mendix低代码开发

Mendix低代码开发 目录概述需求&#xff1a; 设计思路实现思路分析1.URL管理2.LL3.Mendix 低代码可视化开发4.Mendix 低代码可视化开发 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip har…