Problem Statement
leetcode problem link
My Solution [TLE]
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__(self):
self.res = 0
def longestZigZag(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
l = self.MaxDepthZigZag(root, True)
r = self.MaxDepthZigZag(root, False)
self.res = max(self.res, max(l, r))
self.longestZigZag(root.left)
self.longestZigZag(root.right)
return self.res
def MaxDepthZigZag(self, node, leftFirst):
if not node:
return 0
curr = 0
direction = True
if leftFirst:
while node:
curr += 1
if direction:
node = node.left
else:
node = node.right
direction = not direction
else:
while node:
curr += 1
if direction:
node = node.right
else:
node = node.left
direction = not direction
return curr - 1
Editorial
Approach: Depth First Search
class Solution:
def longestZigZag(self, root: Optional[TreeNode]) -> int:
self.pathLength = 0
def dfs(node, goLeft, steps):
if node:
self.pathLength = max(self.pathLength, steps)
if goLeft:
dfs(node.left, False, steps + 1)
dfs(node.right, True, 1)
else:
dfs(node.left, False, 1)
dfs(node.right, True, steps + 1)
dfs(root, True, 0)
return self.pathLength