思路:二叉树中序遍历是有序的
//递归
long pre=LONG_MIN;
bool isValidBST(TreeNode* root) {
if(root==nullptr)
return true;
if(!isValidBST(root->left))
return false;
if(pre>=root->val)
return false;
pre=root->val;
return isValidBST(root->right);
}
//迭代
bool isValidBST(TreeNode* root) {
if(root==nullptr)
return true;
stack<TreeNode *> stk;
TreeNode *cur=root;
long long pre=(long long)(INT_MIN)-1;
while(cur||!stk.empty()){
while(cur){
stk.push(cur);
cur=cur->left;
}
cur=stk.top();
if(pre>=cur->val)
return false;
pre=cur->val;
stk.pop();
cur=cur->right;
}
return true;
}