DFS后序位置进行操作因为后序位置可以接收到返回值
def longestUnivaluePath(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.res = 0
def dfs(root):
if not root:
return
left = dfs(root.left) #可以分解问题来做即求每个节点的最长路径
right = dfs(root.right) #在后序位置进行操作可以接收到返回值,减少遍历次数
left_len , right_len = 0 , 0 #每次置为0,如果是连续的就会加上返回值,不连续应该从0开始
if root.left and root.val == root.left.val:
left_len = left + 1 #节点左边路径的最长长度
if root.right and root.val == root.right.val:
right_len = right + 1 #节点右边路径的最长长度
self.res = max(self.res , left_len + right_len) #一个节点的最长左路径加上最长的右路径就是答案,记录之前节点最大的就行
return max(left_len,right_len) #因为不能同时选择两边,所以返回较长的那条边
dfs(root)
return self.res