方法1:
class Solution {
public:
bool dfsleft(TreeNode *root,int value){
if(root==NULL) return true;
if(root->val>=value) return false;
return dfsleft(root->left,value)&&dfsleft(root->right,value);
}
bool dfsright(TreeNode *root,int value){
if(root==NULL) return true;
if(root->val<=value) return false;
return dfsright(root->left,value)&&dfsright(root->right,value);
}
bool isValidBST(TreeNode* root) {
if(root==NULL) return true;
if(!dfsleft(root->left,root->val)||!dfsright(root->right,root->val)) return false;
return isValidBST(root->left)&&isValidBST(root->right);
}
};
方法2:
class Solution {
public:
vector<int> s;
bool isValidBST(TreeNode* root) {
if(root==NULL) return true;
if(root->left==NULL&&root->right==NULL) return true;
inorder(root);
for(int i=1;i<s.size();i++)
{
if(s[i-1]>=s[i]) return false;
}
return true;
}
void inorder(TreeNode* root)
{
if(root==NULL) return ;
inorder(root->left);
s.push_back(root->val);
inorder(root->right);
}
};
方法3:
class Solution {
public:
bool isValidBST(TreeNode* root) {
if(root==NULL) return true;
if(root->left==NULL&&root->right==NULL) return true;
TreeNode *prev=NULL;
return inorder(root,prev);
}
bool inorder(TreeNode* root,TreeNode *&prev)
{
if(root==NULL) return true;
if(!inorder(root->left,prev)) return false;
if(prev&&prev->val>=root->val) return false;
prev=root;
return inorder(root->right,prev);
}
};