687.Longest Univalue Path
===
###### tags: `Medium`,`Tree`,`DFS`
[687. Longest Univalue Path](https://leetcode.com/problems/longest-univalue-path/)
### 題目描述
Given the root of a binary tree, return the length of the longest path, where each node in the path has the same value. This path may or may not pass through the root.
**The length of the path** between two nodes is represented by the number of edges between them.
##### Example 1:
![](https://i.imgur.com/4kBItQ6.png)
```
Input: root = [5,4,5,1,1,null,5]
Output: 2
Explanation: The shown image shows that the longest path of the same value (i.e. 5).
```
##### Example 2:
![](https://i.imgur.com/RWx22Nk.png)
```
Input: root = [1,4,5,4,4,null,5]
Output: 2
Explanation: The shown image shows that the longest path of the same value (i.e. 4).
```
##### Constraints:
* The number of nodes in the tree is in the range [0, 104].
* -1000 <= Node.val <= 1000
* The depth of the tree will not exceed 1000.
### 解答
#### Python
```python=
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__(self):
self.mx = 0
def longestUnivaluePath(self, root: Optional[TreeNode]) -> int:
if not root: return 0
def dfs(root: Optional[TreeNode], num: int) -> int:
if not root: return 0
l = dfs(root.left, root.val)
r = dfs(root.right, root.val)
self.mx = l + r if l + r > self.mx else self.mx
return 0 if root.val != num else 1 + max(l, r)
dfs(root, root.val)
return self.mx
```
> [name=Kobe Bryant] [time=Nov 25, 2022]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)