当前位置: 首页 > news >正文

[LeetCode 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

思路分析

1.dfs的返回值是什么?
在这里插入图片描述
如图,对于根节点而言,需要求的是
a.左子树单侧最长路径,也就是max(L1,R1)
b.右子树单侧最长路径,也就是max(L2,R2)
c.所以根据以上描述,dfs返回的应该是当前节点单侧最长路径长度,对于上图来说,左孩子返回的是max(L1,R1) + 1,右孩子返回的是max(L2,R2) + 1
d.如果孩子和根节点的值不同,则返回0!

2.对于每个节点如何求以当前节点的最长路径?
L + R就是要求的路径长度

3.将上述两个逻辑分析清楚之后,代码就好写了

代码:

class Solution {
public:
    int res = 0;
    int dfs(TreeNode* root){
        if(!root) return 0;
        int l = dfs(root->left), r = dfs(root->right);
        //如果孩子节点的值与父节点值不一样,说明延伸不出去,长度为0
        if(!root->left || root->val != root->left->val) l = 0;
        if(!root->right || root->val != root->right->val) r = 0;
        //计算以当前节点为根节点的最长同值路径
        res = max(res, l + r);
        //返回值是单侧的路径长度+1
        return max(l, r) + 1;
    }
    int longestUnivaluePath(TreeNode* root) {
        if(!root) return 0;
        dfs(root);
        return res;
    }
};

相关文章:

  • 全局平均池化/全局最大池化Pytorch实现:
  • 分销商城小程序开发运营逻辑是什么?
  • Grid网格布局
  • C++PrimerPlus跟读记录【第五章】循环和关系表达式
  • 《WEB安全渗透测试》(29)记一次HOST头投毒漏洞
  • DGIOT平台基本功能介绍——物模型及指令通道相关部分介绍
  • PVA接枝键合聚苯乙烯二乙烯基苯交联微球/聚苯乙烯微球表面接枝聚合丙烯酸酯的改性方法
  • CRC校验码
  • 关于pycharm打开时一直加载中的解决办法
  • 问题描述:maven本地仓库有包,导致could not find artifact * * * 问题!
  • 【第十六篇】- Maven 自动化部署
  • Redis主从模式下过期数据和数据不一致
  • E 网络编程
  • 《位图BitMap - 基于java实现》
  • 【韩老师零基础30天学会Java 02】学会 2种冒泡排序 和 2种二分查找 递归与非递归
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【前端学习】-粗谈选择器
  • exports和module.exports
  • Git的一些常用操作
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PAT A1050
  • QQ浏览器x5内核的兼容性问题
  • windows下mongoDB的环境配置
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 码农张的Bug人生 - 见面之礼
  • 每天一个设计模式之命令模式
  • 前端技术周刊 2019-02-11 Serverless
  • 前端面试之CSS3新特性
  • 少走弯路,给Java 1~5 年程序员的建议
  • 使用docker-compose进行多节点部署
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 详解移动APP与web APP的区别
  • 一些css基础学习笔记
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • !!Dom4j 学习笔记
  • #大学#套接字
  • (1)(1.11) SiK Radio v2(一)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (NSDate) 时间 (time )比较
  • (Ruby)Ubuntu12.04安装Rails环境
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二十四)Flask之flask-session组件
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .htaccess配置常用技巧
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net Stream篇(六)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .Net中wcf服务生成及调用