parameters: (self, root, lower = float('-inf'), upper = float('inf'))
return_statement: return self.isValidBST(root.left, lower, min(upper, root.val)) \
          and self.isValidBST(root.right, max(lower, root.val), upper)
docstring: :type root: TreeNode
      :rtype: bool
docstring_summary: :type root: TreeNode
      :rtype: bool
docstring_tokens: : type root : TreeNode : rtype : bool
function: def isValidBST1(self, root, lower = float('-inf'), upper = float('inf')):
      """
      :type root: TreeNode
      :rtype: bool
      """
      if not root: return True
      if root.val <= lower or root.val >= upper: return False
      return self.isValidBST(root.left, lower, min(upper, root.val)) \
          and self.isValidBST(root.right, max(lower, root.val), upper)
function_tokens: def isValidBST1 ( self , root , lower = float ( '-inf' ) , upper = float ( 'inf' ) ) : if not root : return True if root . val <= lower or root . val >= upper : return False return self . isValidBST ( root . left , lower , min ( upper , root . val ) ) and self . isValidBST ( root . right , max ( lower , root . val ) , upper )