给你一棵指定的二叉树,请你计算它最长连续序列路径的长度。
该路径,可以是从某个初始结点到树中任意结点,通过「父 - 子」关系连接而产生的任意路径。
这个最长连续的路径,必须从父结点到子结点,反过来是不可以的。
示例 1:
输入:
1
\
3
/ \
2 4
\
5
输出: 3
解析: 当中,最长连续序列是 3-4-5,所以返回结果为 3
示例 2:
输入:
2
\
3
/
2
/
1
输出: 2
解析: 当中,最长连续序列是 2-3。注意,不是 3-2-1,所以返回 2。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-longest-consecutive-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
问从父到子能不能构成连续序列,上 DFS。
用tmp记录目前的连续子序列的长度, parent_val记录父节点的值,
每次搜索到新的子节点,就判断一下能不能跟父节点连在一起,如果可以,tmp + 1,尝试刷新res,
如果不可以,重置tmp为1
class Solution(object):
def longestConsecutive(self, root):
"""
:type root: TreeNode
:rtype: 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