leetcode687. 最长同值路径(java)

news2025/1/10 20:39:58

最长同值路径

  • 题目描述
    • DFS 深度遍历
    • 代码演示

题目描述

难度 - 中等
LC - 687. 最长同值路径

给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
两个节点之间的路径长度 由它们之间的边数表示。

示例1:
在这里插入图片描述输入:root = [5,4,5,1,1,5]
输出:2

示例2:
在这里插入图片描述输入:root = [1,4,5,4,4,5]
输出:2

提示:
树的节点数的范围是 [0, 104]
-1000 <= Node.val <= 1000
树的深度将不超过 1000
在这里插入图片描述

DFS 深度遍历

设计递归函数 int dfs(TreeNode root),含义为传入根节点 root,返回以该节点为起点,往下走同值路径所能经过的最大路径长度(即不能同时往左右节点走),同时使用全局变量 max 记录答案路径所能经过最大路径长度。
在递归函数内部,先通过递归 root 的左右子节点,拿到以 root.left 和 root.right 为起点的最大路径长度 l 和 r,然后根据当前节点值和左右子节点值的相等关系来更新 ans,同时用 cur 维护「以当前节点 root 为目标路径中深度最小(位置最高)节点时」所经过的最大路径长度。

代码演示

/**
 * 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;
    public int longestUnivaluePath1(TreeNode root) {
        ans = 0;
        dfs(root);
        return ans;
    }

    int dfs(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = dfs(root.left);
        int right = dfs(root.right);
        //left1 right1 来记录左右节点和头节点的连接情况
         int left1 = 0, right1 = 0;
         //如果左边节点和root 相等,left1 + 1,就连接起来了
        if(root.left != null && root.left.val == root.val){
            left1 = left + 1;
        }
        //同上
        if(root.right != null && root.right.val == root.val){
            right1 = right + 1;
        }
        //记录最大值,如果左右节点都相等,两个值相加
        ans = Math.max(ans,left1 + right1);
        return Math.max(left1,right1);
    }
}

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

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

相关文章

序列到序列学习(seq2seq)

permute(1,0,2)&#xff0c;将batch_size 放在中间state 最后一个时刻&#xff0c;每个层的输出

基于SSRF漏洞复现引发的CRLF之(session会话固定+XSS)组合拳利用思路

文章目录 前言Redis通信协议RESPSSRF利用HTTP头注入Redis通信协议Getshell引发思考引出CRLF漏洞CRLF概念漏洞危害漏洞检测挖掘技巧修复建议 引出会话固定漏洞漏洞原理漏洞检测漏洞利用漏洞修复 CRLF会话固定漏洞攻击组合实战案例漏洞利用原理 CRLFXSS攻击实战案例 总结 前言 ​…

网络技术学习十三:DNS(域名服务器)

DNS 域名 产生背景 通过IP地址访问目标主机&#xff0c;不便于记忆 通过容易记忆的域名来标识主机位置 域名的树形层次化结构 根域 领级域 主机所处的国家/区域&#xff0c;注册人的性质 二级域 注册人自行创建的名称 主机名 区域内部的主机的名称 由注册人自行创建…

基于语雀编辑器的在线文档编辑与查看

概述 语雀是一个非常优秀的文档和知识库工具&#xff0c;其编辑器更是非常好用&#xff0c;虽无开源版本&#xff0c;但有编译好的可以使用。本文基于语雀编辑器实现在线文档的编辑与文章的预览。 实现效果 实现 参考语雀编辑器官方文档&#xff0c;其实现需要引入以下文件&…

Android 9.0 网络之netd详解

一、DHCP流程 分析netd之前先了解一下网络自动获取IP流程&#xff0c;借鉴下图流程查看代码&#xff1a; &#xff08;1&#xff09;WIFI扫描到可用网络后进行连接&#xff0c;代码路径&#xff1a;\frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiStateMa…

计算机安全学习笔记(IV):基于角色的访问控制 - RBAC

RBAC(Role-Based Access Control)基于用户在系统中设定的角色而不是用户的身份。一般来说&#xff0c;RBAC模型定义角色为组织中的一项工作职责&#xff0c;RBAC系统给角色而不是给单独的用户分配访问权。用户根据他们的职责被静态地或动态地分配给不同的角色。 RBAC模型间的关…

STM32串口DMA+空闲中断接收数据-基于CubeMX创建

串口空闲中断&#xff08;UART_IT_IDLE&#xff09;&#xff1a;串口接收数据&#xff0c;超过一个字节的时间内没有再接收到数据的时候发生的 好处&#xff1a;与传统的判断\r,\n为结束位相比&#xff0c;空闲中断判断串口数据接收完毕准确且迅速 缺点&#xff1a;串口持续不…

分布式系统常用的模式

分布式系统常用的模式 Ambassador 名称&#xff1a;“大使”模式 介绍&#xff1a;作为应用程序和其他服务的“中间人”&#xff0c;负责应用程序和其他服务之间的通信&#xff0c;包括日志、监控或重试处理等任务。 举例&#xff1a;K8S使用Envoy作为一个“大使”来简化服务…

[C语言] 结构体

结构体类型的声明 结构体初始化 结构体成员访问 结构体传参 目录 1. 结构体的声明 1.1 结构的基础知识 1.2 结构的声明 1.3 结构成员的类型 1.4 结构体变量的定义和初始化 2. 结构体成员的访问 3. 结构体传参 1. 结构体的声明 1.1 结构的基础知识 结构是一些值的集…

Windows系统管理一:操作系统概述

计算机系统的层次结构 五大基本功能 处理器管理 其工作主要是进程调度&#xff0c;在单用户单任务的情况下&#xff0c;必处理器仅为一个用户的一个任务所独占&#xff0c;进程管理的工作十分简单。但在多道程序或多用户的情况下&#xff0c;组织多个作业或任务时&#xff0c…

归并排序的递归和非递归实现

归并排序 平均时间复杂度O(n*logn),空间复杂度O(n) 递归实现 思路&#xff1a; 分治法 即先使每个子序列有序&#xff0c;再使子序列段间有序。若将两个有序表合并成一个有序表&#xff0c;称为二路归并。归并排序是一种稳定的排序方法 code&#xff1a; //递归版public st…

Linux 安装 JDK

要在Linux上安装JDK 1&#xff0c;按照以下步骤进行操作&#xff1a; 1. 下载JDK安装文件&#xff1a;首先&#xff0c;你需要找到适用于你操作系统的JDK安装文件&#xff08;tar.gz或tar.bz2格式&#xff09;。你可以从Oracle官方网站或其他可信的来源下载该文件。 2. 解压…

Unity 自制转表插件,高效便捷,无反射代码

XlsxTransverter Unity 高效转表工具 剔除了上一版本的反射用法 使用代码生成的 Decode方法来自解析 并与内存stream流保持一一对应 极大的提高了读表的访问速度 字段和字节流 保持一一对应 程序自动生成 decode方法 内存布局 Unity读表插件 https://github.com/badApple001/…

conda环境安装opencv带cuda版本

主要是cmake编译选项需要修改 以下两个选项按照自己情况修改 -D OPENCV_EXTRA_MODULES_PATH../opencv_contrib/modules \ -D CUDA_TOOLKIT_ROOT_DIR/usr/local/cuda-12.2 \ 其中/home/lixin/anaconda3/envs/stereo 改成你自己的conda环境 cmake -D CMAKE_BUILD_TYPER…

BUUCTF-WEB-[ACTF2020 新生赛]Includel

打开靶机 点击tips 利用Burp抓包&#xff0c;未见异常 但发现了响应头是 PHP/7.3.13 想到了"php://input"伪协议POST发送PHP代码 构建Payload&#xff1a;?filephp://filter/readconvert.base64-encode/resourceflag.php 这里需要注意的是使用php://filter伪协议…

PHP对接阿里云虚拟号的实现(号码隐私保护)

fastadmin 封装框架 实现功能&#xff1a;AXN隐私号绑定、解绑&#xff1b; 场景&#xff1a;为店铺手机号开通虚拟号&#xff0c;用户联系店铺展示虚拟号码&#xff1b; 官方开放文档地址&#xff1a;https://help.aliyun.com/document_detail/59655.html?spma2c4g.111742…

医院空调冷热源设计方案VR元宇宙模拟演练的独特之处

作为一个备受关注的技术-元宇宙&#xff0c;毋庸置疑的是&#xff0c;因为建筑本身契合了时尚、前卫、高端、虚拟、科幻、泛在、协作、互通等元素特征&#xff0c;因此在建筑行业更需要元宇宙&#xff0c;以居民建筑环境冷热源设计来说&#xff0c;元宇宙会打破既定的现实阻碍和…

【MySQL】MySQL 数据库基础

MySQL 数据库基础 一. 数据库的操作1. 显示当前的数据库2. 创建数据库3. 使用数据库4. 删除数据库 二. 常用数据类型1. 数据类型2. 字符串类型3. 日期类型 三. 表的操作1. 查看表结构2. 创建表4. 删除表 一. 数据库的操作 1. 显示当前的数据库 SHOW DATABASES;MySQL 不区分大…

PHP设备检验系统Dreamweaver开发mysql数据库web结构php编程计算机网页代码

一、源码特点 PHP设备检验系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址 https://download.csdn.net/download/qq_41221322/88306259 php设备检验系统1 …

海康机器人工业相机IP设置方式

文章目录 一.什么情况下需要修改相机IP二.网口相机IP地址修改方式 一.什么情况下需要修改相机IP 二.网口相机IP地址修改方式