所以这样的做法是错误的:
- bool isValidBST(TreeNode *root) {
- if(root==NULL)
- return true;
- bool l=true;
- bool r=true;
- if(root->left!=NULL)
- l=root->val>root->left->val;
- if(root->right!=NULL)
- r=root->val<root->right->val;
- return l&&r&&isValidBST(root->left)&&isValidBST(root->right);
- }
- TreeNode * pre=NULL;
- bool isValidBST(TreeNode *root) {
- if(root==NULL)
- return true;
- bool l=isValidBST(root->left);
- if(pre==NULL)
- pre=root;
- else{
- if(root->val<=pre->val){
- return false;
- }
- pre=root;
- }
- bool r=isValidBST(root->right);
- return l&&r;
- }
- TreeNode * pre=NULL;
- bool flag=true;
- void f(TreeNode *root) {
- if(root==NULL)
- return;
- f(root->left);
- if(pre==NULL)
- pre=root;
- else{
- if(root->val<=pre->val){
- flag=false;
- return;
- }
- pre=root;
- }
- f(root->right);
- return;
- }
- bool isValidBST(TreeNode *root) {
- f(root);
- return flag;
- }
669



被折叠的 条评论
为什么被折叠?



