Leetcode 687.最长同值路径
Time: 20190901
Type: Easy
题目描述
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5/ \4 5/ \ \1 1 5
输出:
2
示例 2:
输入:
1/ \4 5/ \ \4 4 5
输出:
2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
和Leetcode 124题目类似,也是可以不经过根的路径,因此着眼点也是放在单个节点上。
我们定义函数longestUnivalue返回左右两边其中最大的路径长度,此时我们有四种情况考虑
对于每个结点,需要考虑四种情况:
- 左右节点的值和根相同
- 左节点和根相同
- 右节点和根相同
- 左右都不相同
其中:
- 第一种情况需要更新最大长度为
max(res, left + right + 2)
- 第二种情况需要更新最大长度为
max(res, left + 1)
- 第三种情况需要更新最大长度为
max(res, right + 1)
- 第四种情况直接返回0即可
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = Noneclass Solution:def longestUnivaluePath(self, root: TreeNode) -> int:res = 0def helper(root):nonlocal resif not root:return 0left = helper(root.left)right = helper(root.right)pl, pr = 0, 0if root.left and root.left.val == root.val:pl = left + 1if root.right and root.right.val == root.val:pr = right + 1res = max(res, pl + pr)return max(pl, pr)helper(root)return res
这段是对下面代码的精简。
class Solution:def longestUnivaluePath(self, root: 'TreeNode') -> 'int':res = 0def helper(root):nonlocal resif not root:return 0left = helper(root.left)right = helper(root.right)if root.left and root.right and root.left.val == root.val == root.right.val:res = max(res, left + right + 2)return max(left, right) + 1elif root.left and root.left.val == root.val:res = max(res, left + 1)return left + 1elif root.right and root.right.val == root.val:res = max(res, right + 1)return right + 1else:return 0helper(root)return res
仍然需要注意,更新res
和向上层返回做回溯的值是不同的。且为了凑成路径,返回的是单边的最长路径,只有这样才有可能和当前结点组成路径。
PS. 结点 or 节点,全文混用了。
相似题目
Leetcode 124. 二叉树最大路径和
Leetcode 543. 二叉树的直径
Leetcode 437. 路径总和III
END.
参考
https://coordinate.wang/index.php/archives/2073/
Leetcode 687.最长同值路径相关推荐
- leetcode —— 687. 最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示.. -------------- 解题思路:使 ...
- LeetCode 687. 最长同值路径(二叉树,递归)
1. 题目 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 1: 输入:5/ \4 5 ...
- 【LeetCode】687. 最长同值路径
一.题目描述 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 二.示例 示例 1: 输入: ...
- leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)
题目 https://leetcode.com/problems/longest-univalue-path/ 题解:树形 dp 套路 实现1:带有 Info 类的树形 dp /*** Definit ...
- java最长同值路径_687.最长同路径值
题目描述 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 输入: 5 / \ 4 5 ...
- 最长路径算法 c语言_「算法」求二叉树的最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 1: 输入: 输出: 2 示例 2: ...
- LeetCode 70爬楼梯71简化路径72编辑距离(dp)
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...
- LeetCode 1027. 最长等差数列(DP)
1. 题目 给定一个整数数组 A,返回 A 中最长等差子序列的长度. 回想一下,A 的子序列是列表 A[i_1], A[i_2], ..., A[i_k] 其中 0 <= i_1 < i_ ...
- LeetCode 674. 最长连续递增序列 (滑动窗口 计数法)
LeetCode 674. 最长连续递增序列 滑动窗口 右边界不断往右移动 左边界收缩条件:当右边界的值小于等于其左边的值时(递减) 左边界收缩到右边界当前位置 class Solution {pub ...
最新文章
- TFLearn 在给定模型精度时候提前终止训练
- 重学TCP协议(9) 半连接队列、全连接队列
- 【Quartz.net】- Cron表达式
- Iphone开发-NSdata 与 NSString,Byte数组,UIImage 的相互转换
- 【报告分享】2019年度薪酬白皮书.pdf(附下载链接)
- TestNG 框架的运用
- python课程报告模板_Python制作WORD报告
- c语言程序设计设计题题库,C语言程序设计题库.doc
- 防止 跨站请求伪造(CSRF)
- 深度学习—神经网络和卷积神经网络简单介绍
- NetWorkHelper 检测网络状态
- 盘点8个高效方法提高睾酮水平
- Frps搭建内网穿透(服务器及客户端详细)
- 如何在FreePBX ISO 中文版本安装讯时网关,潮流16FXS 网关和潮流话机
- Kindle Windows版本 中文字体修改工具
- 写文案,认准这几个APP就够了
- 山寨新浪微博的用户名片(简易实现)
- 图书管理系统(纯C语言)
- 全国程序员高考卷,开始答题!
- rails连接Mysql的数据库
热门文章
- pytorch---之固定某些层权重再训练
- 安徽省级办公室高级应用计算机二级,2019年9月安徽省计算机等级二级考试教程:二级MSOffice高级应用上机指导...
- (03)两个模型的交集、并集、差集
- java的编程规范_JAVA编程规范-OOP规范
- numactl mysql_CentOS学习笔记 - 10. 开发机mysql安装
- java 对象equals_浅谈Java对象的equals方法
- 江苏职称计算机考试错做题,江苏省职称计算机考试word注意点.doc
- php实现简单的框架,PHP 实现简单的 MVC 框架
- ds18b20温度转换指令_学习心得 | 温度检测工程模块划分总结与案例分析
- 如何打造领英朋友圈_领英点赞,请摆好姿势!