LeetCode系列98—验证二叉搜索树

题意

98.验证二叉搜索树

题解

方法一: 递归

class Solution {
    
    
public:
    bool helper(TreeNode* root, long long lower, long long upper) {
    
    
        if (root == nullptr) {
    
    
            return true;
        }
        if (root -> val <= lower || root -> val >= upper) {
    
    
            return false;
        }
        return helper(root -> left, lower, root -> val) && helper(root -> right, root -> val, upper);
    }
    bool isValidBST(TreeNode* root) {
    
    
        return helper(root, LONG_MIN, LONG_MAX);
    }
};

方法二:中序遍历

class Solution {
    
    
public:
    bool isValidBST(TreeNode* root) {
    
    
        stack<TreeNode*> st;
        long long pre = (long long)INT_MIN - 1;
        while (!st.empty() || root) {
    
    
            while (root) {
    
    
                st.push(root);
                root = root->left;
            }
            root = st.top();
            st.pop();
            if (root->val <= pre)
                return false;
            pre = root->val;
            root = root->right;
        }
        return true;
    }
};

递归版本

class Solution {
    
    
    long pre = Long.MIN_VALUE; // 记录上一个节点的值,初始值为Long的最小值

    public boolean isValidBST(TreeNode root) {
    
    
        return inorder(root);
    }

    // 中序遍历
    private boolean inorder(TreeNode node) {
    
    
        if(node == null) return true;
        boolean l = inorder(node.left);
        if(node.val <= pre) return false;
        pre = node.val;
        boolean r = inorder(node.right);
        return l && r;
    }
}

参考

验证二叉搜索树

Guess you like

Origin blog.csdn.net/younothings/article/details/120139903