大致思路:
二叉搜索树,需满足:右子树的最大值>根节点的值>左子树的最大值,因此我们从上往下遍历。
初始化时将最大值赋值为库里规定的最大值LONG_MAX,最小值赋值为库里规定的最小值LONG_MIN,并传入递归函数。从根节点开始,每次递归遍历左子树时,用现递归层次的根节点的值作为最大值传入递归函数;每次递归遍历右子树时,用现递归层次的根节点的值作为最小值传入递归函数。因为return的值采用&&,因此所有结点中只要有一个不满足条件,即返回false,那么返回到最上层的根节点时一定是false。
bool isValid(struct TreeNode *root,long long max,long long min){
if(root==NULL)
return true;
else if(root->val>=max||root->val<=min)
return false;
else
return isValid(root->left,root->val,min)&&isValid(root->right,max,root->val);
}
bool isValidBST(struct TreeNode* root){
return isValid(root,LONG_MAX,LONG_MIN);
}