方法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); } };