给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
思路:
用递归的思想,因为任何一个最小路径都会有一个根,我们从根开始不断左右搜索,维护最大值
class Solution:
def longestUnivaluePath(self, root: TreeNode) -> int:
self.ans=0
def find_row(node):
if not node:
return 0
left_len=find_row(node.left)
right_len=find_row(node.right)
left_row=right_row=0
if node.left and node.left.val==node.val:#判断左端点存在并且值相等
left_row=left_len+1
if node.right and node.right.val==node.val:
right_row=right_len+1
self.ans=max(self.ans,left_row+right_row)
return max(left_row,right_row)
find_row(root)
return self.ans