递归验证二叉搜索树只需要满足三个条件
1.左子树所有节点小于当前节点,右子树的所有节点大于当前节点
2.左子树为一个二叉搜索树
3.右子树为一个二叉搜索树
满足三个条件则认为当前树为一个二叉搜索树
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
/*
递归判断
*/
bool isValidBST(TreeNode* root) {
if(root==nullptr){
return true;
}
bool left = false;
bool right = false;
if(root->left == nullptr ||root->left!=nullptr&&acqure_max(root->left,root->val)){
left = true;
}
if(root->right == nullptr ||root->right!=nullptr&&acqure_min(root->right,root->val)){
right = true;
}
return left&&right&&isValidBST(root->left)&&isValidBST(root->right);
}
// 查看右子树是否都大于当前节点
int acqure_min(TreeNode *root,int min){
if(root==nullptr){
return true;
}
if(root->val<=min){
return false;
}
return acqure_min(root->left,min)&&acqure_min(root->right,min);
}
// 查看左子树是否都小于当前节点
int acqure_max(TreeNode *root,int max){
if(root==nullptr){
return true;
}
if(root->val>=max){
return false;
}
return acqure_max(root->left,max)&&acqure_max(root->right,max);
}
};