📜  二叉树中具有相同值的最长路径(1)

📅  最后修改于: 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$ 为二叉树的高度。