import sys
 
class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        def is_valid(node, left_bound=sys.maxsize, right_bound=-sys.maxsize):
            if not node:
                return True
            
            if not (node.val < left_bound and node.val > right_bound):
                return False
            
            return is_valid(node.left, node.val, right_bound) and \
                   is_valid(node.right, left_bound, node.val)
 
        return is_valid(root)

Complexity

Time:
Space: