* struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return bool布尔型
     */
     /*
     二叉树的性质是左子树的节点值小于根结点,右子树的节点值大于根节点。所以安装中序遍历读取,会得到一个单调递增的序列。所以这边通过中序遍历把值存进数组,如果找到某个i+1值小于i,那么说明这不是一个合法的二叉搜索树。
     */
    vector<int> res;
    vector<int> inorder(TreeNode* root){
        if(!root){
            return {};
        }
        inorder(root->left);
        res.push_back(root->val);
        inorder(root->right);
        return res;
    }
    bool isValidBST(TreeNode* root) {
        // write code here
//         bool flag = false;
        if(!root){
            return true;
        }
        vector<int> res = inorder(root);
        bool flag = true;
        for(int i=0;i<res.size()-1;i++){
            if(res[i+1]< res[i]){
                flag = false;
            }
        }
        return flag;
    }
};