【leetcode】98. 验证二叉搜索树

 

bool recursion(struct TreeNode* root,long lower,long upper){
    if(!root)
        return true;
    if(root->val <= lower || root->val >= upper)
        return false;
    return recursion(root->left,lower,root->val) && recursion(root->right,root->val,upper);    
}
bool isValidBST(struct TreeNode* root){
    return recursion(root,LONG_MIN,LONG_MAX);
}

 

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        stack<TreeNode*> stack;
        long long inorder = (long long)INT_MIN - 1;

        while (!stack.empty() || root != nullptr) {
            while (root != nullptr) {
                stack.push(root);
                root = root -> left;
            }
            root = stack.top();
            stack.pop();
            // 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树
            if (root -> val <= inorder) {
                return false;
            }
            inorder = root -> val;
            root = root -> right;
        }
        return true;
    }
};

 

posted @ 2020-12-15 17:20  温暖了寂寞  阅读(100)  评论(0编辑  收藏  举报