/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */

#include <climits>
class Solution {
public:
    /**
        判断是不是搜索二叉树,深度优先搜索-》比较左子树要小,右子树要大-》但是不能超过根节点作为子树的性质,左子树不能小于根节点作为右子树的父节点的值,依次类推,甚至更上层的树-》直接在深度优先搜索中传递其限制条件,以及更新限制,没有则是true
     */
    bool df(TreeNode* root, int min_val, int max_val){
        if(root == nullptr)return true;

        return root->val < max_val && root->val > min_val && df(root->left, min_val, root->val) && df(root->right, root->val, max_val);
    }

    bool isValidBST(TreeNode* root) {

        return df(root, INT_MIN, INT_MAX);
    }
};