[
tree
dfs
]
Leetcode 0549 Binary Tree Longest Consecutive Sequence II
Problem statement
https://leetcode.com/problems/binary-tree-longest-consecutive-sequence-ii/
Solution
Use helper dfs
function, which for every node returns two values: length of longest path, starting from this node and going down, which is decreasing monotonic and second value is for increasing monotonic. If we reached None
, return (0, 0)
. For every node check it children and update lengths = [smaller, bigger]
list. Be careful to use lengths[0] = max(lengths[0], 1 + smaller)
, not just lengths[0] = 1 + smaller
, because we can have two children with the same value and we need to choose the best one. Also we update self.maxlen
.
Complexity
Time complexity is O(n)
, space complexity is O(h)
.
Code
class Solution:
def longestConsecutive(self, root):
self.maxlen = 1
def dfs(node):
lengths = [0, 0]
for child in filter(None, [node.left, node.right]):
[smaller, bigger] = dfs(child)
if child.val == node.val - 1:
lengths[0] = max(lengths[0], 1 + smaller)
elif child.val == node.val + 1:
lengths[1] = max(lengths[1], 1 + bigger)
self.maxlen = max(self.maxlen, lengths[0] + lengths[1] + 1)
return lengths
dfs(root)
return self.maxlen