bool find(TreeNode* root, long long min,long long max)
{
if (root == NULL)
return true;
if (root->val <= min || root->val >= max)
return false;
// Check left subtree with updated max_val
bool left_valid = find(root->left, min, root->val);
// Check right subtree with updated min_val
bool right_valid = find(root->right, root->val, max);
return left_valid && right_valid;
}
bool isValidBST(TreeNode* root) {
return find(root,LONG_MIN,LONG_MAX);
}