第一眼就是递归hhh,传值判断来自上个节点传来的范围。左子树的话别大于根节点,右子树要大于根节点就行了。确保当前这个节点在给予的范围内。
class Solution {
public:
bool recursion(TreeNode * root,long long min,long long max)
{
if(root == nullptr)
return true;
if(root->val <=min || root->val >= max) //超出范围
return false;
return recursion(root->left,min,root->val) && recursion(root->right,root->val,max); //两个成立则表示左右子树都没问题
}
bool isValidBST(TreeNode* root) {
return recursion(root,LONG_MIN,LONG_MAX);
}
};