返回

潜移默化: 二叉树中最长的同值路径剖析

前端

题目背景

「最长同值路径」题的本质是要求我们在一棵二叉树中寻找一条最长的路径,这条路径上的所有节点都具有相同的值。这意味着我们可以将问题分解为两个步骤: 首先,我们需要找到所有具有相同值的节点组成的路径; 其次,我们需要从这些路径中挑选出最长的路径。

解题思路

为了解决这个问题,我们可以采用深度优先搜索(DFS)算法。深度优先搜索是一种遍历二叉树的经典算法,它能够有效地遍历树的每个节点,并找出满足特定条件的路径。具体而言,我们可以从根节点开始,然后逐层向下遍历二叉树,记录下所有具有相同值的节点。当我们遍历到一个节点时,我们可以将这个节点与它的父节点进行比较,如果它们具有相同的值,我们就将它们添加到当前的路径中; 如果它们具有不同的值,我们就将当前的路径清零,并从这个节点开始新的路径。

代码示例

def longest_univalue_path(root):
    """
    :type root: TreeNode
    :rtype: int
    """
    # 定义一个全局变量来记录最长的路径
    max_path = 0

    # 定义一个递归函数来遍历二叉树
    def dfs(node):
        # 如果当前节点为空,则返回0
        if not node:
            return 0

        # 计算当前节点的左子树的最长同值路径长度
        left_path = dfs(node.left)

        # 计算当前节点的右子树的最长同值路径长度
        right_path = dfs(node.right)

        # 如果当前节点的值与它的左子节点的值相同,则更新左子树的最长同值路径长度
        if node.val == node.left.val:
            left_path += 1

        # 如果当前节点的值与它的右子节点的值相同,则更新右子树的最长同值路径长度
        if node.val == node.right.val:
            right_path += 1

        # 更新最长的路径
        max_path = max(max_path, left_path + right_path)

        # 返回当前节点的最长同值路径长度
        return max(left_path, right_path)

    # 从根节点开始遍历二叉树
    dfs(root)

    # 返回最长的路径
    return max_path

总结

在本文中,我们详细地讲解了如何解决LeetCode题库中687号题「最长同值路径」。我们首先分析了题目的背景,然后介绍了解题思路,最后给出了详细的代码示例。希望通过本文,读者能够对二叉树的遍历算法有更深入的理解,并能够轻松解决类似的问题。