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.最长同值路径相关推荐

  1. leetcode —— 687. 最长同值路径

    给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示.. -------------- 解题思路:使 ...

  2. LeetCode 687. 最长同值路径(二叉树,递归)

    1. 题目 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 1: 输入:5/ \4 5 ...

  3. 【LeetCode】687. 最长同值路径

    一.题目描述 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 二.示例 示例 1: 输入: ...

  4. leetcode 687. Longest Univalue Path | 687. 最长同值路径(树形dp)

    题目 https://leetcode.com/problems/longest-univalue-path/ 题解:树形 dp 套路 实现1:带有 Info 类的树形 dp /*** Definit ...

  5. java最长同值路径_687.最长同路径值

    题目描述 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 输入: 5 / \ 4 5 ...

  6. 最长路径算法 c语言_「算法」求二叉树的最长同值路径

    给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 1: 输入: 输出: 2 示例 2: ...

  7. LeetCode 70爬楼梯71简化路径72编辑距离(dp)

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...

  8. LeetCode 1027. 最长等差数列(DP)

    1. 题目 给定一个整数数组 A,返回 A 中最长等差子序列的长度. 回想一下,A 的子序列是列表 A[i_1], A[i_2], ..., A[i_k] 其中 0 <= i_1 < i_ ...

  9. LeetCode 674. 最长连续递增序列 (滑动窗口 计数法)

    LeetCode 674. 最长连续递增序列 滑动窗口 右边界不断往右移动 左边界收缩条件:当右边界的值小于等于其左边的值时(递减) 左边界收缩到右边界当前位置 class Solution {pub ...

最新文章

  1. TFLearn 在给定模型精度时候提前终止训练
  2. 重学TCP协议(9) 半连接队列、全连接队列
  3. 【Quartz.net】- Cron表达式
  4. Iphone开发-NSdata 与 NSString,Byte数组,UIImage 的相互转换
  5. 【报告分享】2019年度薪酬白皮书.pdf(附下载链接)
  6. TestNG 框架的运用
  7. python课程报告模板_Python制作WORD报告
  8. c语言程序设计设计题题库,C语言程序设计题库.doc
  9. 防止 跨站请求伪造(CSRF)
  10. 深度学习—神经网络和卷积神经网络简单介绍
  11. NetWorkHelper 检测网络状态
  12. 盘点8个高效方法提高睾酮水平
  13. Frps搭建内网穿透(服务器及客户端详细)
  14. 如何在FreePBX ISO 中文版本安装讯时网关,潮流16FXS 网关和潮流话机
  15. Kindle Windows版本 中文字体修改工具
  16. 写文案,认准这几个APP就够了
  17. 山寨新浪微博的用户名片(简易实现)
  18. 图书管理系统(纯C语言)
  19. 全国程序员高考卷,开始答题!
  20. rails连接Mysql的数据库

热门文章

  1. pytorch---之固定某些层权重再训练
  2. 安徽省级办公室高级应用计算机二级,2019年9月安徽省计算机等级二级考试教程:二级MSOffice高级应用上机指导...
  3. (03)两个模型的交集、并集、差集
  4. java的编程规范_JAVA编程规范-OOP规范
  5. numactl mysql_CentOS学习笔记 - 10. 开发机mysql安装
  6. java 对象equals_浅谈Java对象的equals方法
  7. 江苏职称计算机考试错做题,江苏省职称计算机考试word注意点.doc
  8. php实现简单的框架,PHP 实现简单的 MVC 框架
  9. ds18b20温度转换指令_学习心得 | 温度检测工程模块划分总结与案例分析
  10. 如何打造领英朋友圈_领英点赞,请摆好姿势!