1. 问题描述:
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。
示例 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
2. 思路分析:
分析题目可以知道我们可以求解出每一个节点的左右子树节点数值相同的最长路径数目,声明一个全局变量来更新当前最长的路径即可。
3. 代码如下:
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
res = 0
def dfs(self, root: TreeNode):
if not root: return 0
l = self.dfs(root.left)
r = self.dfs(root.right)
if not root.left or root.left.val != root.val: l = 0
if not root.right or root.right.val != root.val: r = 0
self.res = max(self.res, l + r)
# 返回当前节点的节点数值相同的最大路径数目
return max(l, r) + 1
def longestUnivaluePath(self, root: TreeNode) -> int:
self.dfs(root)
return self.res