less than 1 minute read

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

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