要求
给你一棵指定的二叉树的根节点 root ,请你计算其中 最长连续序列路径 的长度。
最长连续序列路径 是依次递增 1 的路径。该路径,可以是从某个初始节点到树中任意节点,通过「父 - 子」关系连接而产生的任意路径。且必须从父节点到子节点,反过来是不可以的。
示例 1:
输入:root = [1,null,3,2,4,null,null,null,5]
输出:3
解释:当中,最长连续序列是 3-4-5 ,所以返回结果为 3 。
示例 2:
输入: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
解题思路:树的问题直接使用递归的方式,在这里我们使用的是在dfs中搜索加1连续的路径,然后我们递归左右子树即可,注意这个题的理解,较为重要。