📅  最后修改于: 2023-12-03 15:36:03.276000             🧑  作者: Mango
二叉树中具有相同值的最长路径是指在二叉树中,存在一条从根节点到叶子节点的路径,使得这条路径上的所有节点的值都相同。我们需要找到这样的路径并返回其长度。
这道题可以用递归的方式来解决。我们可以定义一个递归函数 longestPath(node)
,表示以节点 node
为起点的具有相同值的最长路径的长度。
如果当前节点的左子节点和右子节点的值都与当前节点的值相同,那么我们可以在左子树和右子树中递归查找相同值的最长路径,并取两者的长度的较大值再加上1,就可以得到以当前节点为起点的相同值的最长路径的长度。
如果当前节点的值与其左子节点的值相同,但是与其右子节点的值不同,那么我们就在左子树中递归查找相同值的最长路径。
如果当前节点的值与其右子节点的值相同,但是与其左子节点的值不同,那么我们就在右子树中递归查找相同值的最长路径。
如果当前节点的左右子节点的值都不同于当前节点的值,那么以当前节点为起点的相同值的最长路径的长度就是1。
def longestPath(root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
left = longestPath(root.left)
right = longestPath(root.right)
if root.left and root.left.val == root.val:
left += 1
else:
left = 0
if root.right and root.right.val == root.val:
right += 1
else:
right = 0
return max(left, right)
时间复杂度:$O(n)$
空间复杂度:$O(h)$,其中 $h$ 为二叉树的高度。