[687][简单][DFS] 最长同值路径
题目描述
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出: 2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
输出: 2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
解题思路
本题中的路径与[124][困难][DFS] 二叉树中的最大路径和中的路径是同种定义, 详情参考124题的解释.
只需要判断当前节点与左右子树根节点值是否相同, 相同则可以吸收子树根节点代表的连线长度.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def longestUnivaluePath(self, root: TreeNode) -> int:
res = float('-inf')
def dfs(node):
if node is None:
return dict()
value = node.val
left_map = dfs(node.left)
right_map = dfs(node.right)
total = left_map.get(value, 0) + right_map.get(value, 0) + 1
nonlocal res
res = max(res, total)
return {value: 1 + max(left_map.get(value, 0), right_map.get(value, 0))}
dfs(root)
return res - 1 if res != float('-inf') else 0
最后更新于
这有帮助吗?