//(lower,upper)这是一个不断更新维护的区间,为什么要更新维护
//为了保证二叉搜索树的正确性,需要根节点左子树的所有值都小于根节点,右子树的所有节点的值呀大于根节点
//lower维护的是当前所遍历到的节点中所能取到的最小值,upper是最大值
class Solution {
public:bool isValidBST(TreeNode* root) {return Recursion(root, LONG_MIN, LONG_MAX);}bool Recursion(TreeNode* leaves, long long lower, long long upper){//(lower,upper)这是一个不断更新维护的区间,为什么要更新维护//为了保证二叉搜索树的正确性,需要根节点左子树的所有值都小于根节点,右子树的所有节点的值呀大于根节点//lower维护的是当前所遍历到的节点中所能取到的最小值,upper是最大值if (leaves == nullptr){return true;//什么时候写true?}if (leaves->val <= lower || leaves->val >= upper)//这一步检查,leaves节点得值是否在(lower,upper)的区间范围内{return false;}return Recursion(leaves->left, lower, leaves->val) && Recursion(leaves->right, leaves->val, upper);// Recursion(leaves->left, lower, leaves->val) 这个是往左子树递归,这里更新了(lower,upper)区间的上界//Recursion(leaves->right, leaves->val, upper)这个事往右子树递归,更新了(lower,upper)区间的下界}
};