对每个结点的左子树和右子树进行递归验证是否为二叉搜索树,如果左右子树都是二叉搜索树且与根节点比较没问题,然后返回true

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        return dfs(root, LLONG_MIN, LLONG_MAX);
    }

    bool dfs(TreeNode* root, long long lower, long long upper) {
        if (root == nullptr) return true; 
 
        if (root->val <= lower || root->val >= upper) return false;
        
        bool leftValid = dfs(root->left, lower, root->val);

        bool rightValid = dfs(root->right, root->val, upper);
        
        return leftValid && rightValid;
    }
};

时间复杂度: O(n) ,需遍历树中所有 n 个节点一次。 空间复杂度: O(n)