






class Solution { //98. O(N)
public:
bool isValidBST(TreeNode* root) {
return dfs(root, nullptr, nullptr);
}
bool dfs(TreeNode* a, TreeNode* lo, TreeNode* hi) {
if (!a) return true;
if (lo && a->val <= lo->val) return false;
if (hi && a->val >= hi->val) return false;
return dfs(a->left, lo, a) && dfs (a->right, a, hi);
}
};