leetcode_298 二叉树最长连续序列

494 阅读1分钟

要求

给你一棵指定的二叉树的根节点 root ,请你计算其中 最长连续序列路径 的长度。

最长连续序列路径 是依次递增 1 的路径。该路径,可以是从某个初始节点到树中任意节点,通过「父 - 子」关系连接而产生的任意路径。且必须从父节点到子节点,反过来是不可以的。

示例 1:

image.png

输入:root = [1,null,3,2,4,null,null,null,5]
输出:3
解释:当中,最长连续序列是 3-4-5 ,所以返回结果为 3

示例 2:

image.png

输入:root = [2,null,3,2,null,1]
输出:2
解释:当中,最长连续序列是 2-3 。注意,不是 3-2-1,所以返回 2

核心代码

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
class Solution:
    def longestConsecutive(self, root: TreeNode) -> int:
        if not root:
            return 0
        
        self.res = 1
        def dfs(node,tmp,parent_val):
            if not node:
                return 
            if node.val == parent_val + 1:
                tmp += 1
                self.res = max(self.res,tmp)
            else:
                tmp = 1

            dfs(node.left,tmp,node.val)
            dfs(node.right,tmp,node.val)
        
        dfs(root.left,1,root.val)
        dfs(root.right,1,root.val)
        return self.res

image.png

解题思路:树的问题直接使用递归的方式,在这里我们使用的是在dfs中搜索加1连续的路径,然后我们递归左右子树即可,注意这个题的理解,较为重要。