98. Validate Binary Search Tree

1. Description

Given the root of a binary tree, determine if it is a valid binary search tree (BST).
A valid BST is defined as follows:

  • The left subtree of a node contains only nodes with keys strictly less than the node’s key.
  • The right subtree of a node contains only nodes with keys strictly greater than the node’s key.
  • Both the left and right subtrees must also be binary search trees.

2. Example

Example 1

Example 1
Input: root = [2,1,3]
Output: true

Example 2

Example 2
Input: root = [5,1,4,null,null,3,6]
Output: false
Explanation: The root node’s value is 5 but its right child’s value is 4.

3. Constraints

  • The number of nodes in the tree is in the range [1, $10^4$].
  • $-2^{31}$ <= Node.val <= $2^{31} - 1$

4. Solutions

n is the number of nodes root
Time complexity: O(n)
Space complexity: O(logn->n)

class Solution {
public:
    bool isValidBST(TreeNode *root) {
        int64_t prev_value = numeric_limits<int64_t>::min();
        return traverse(root, prev_value);
    }

private:
    bool traverse(TreeNode *root, int64_t &prev_value) {
        if (root == nullptr) {
            return true;
        }

        bool left_tree_valid = traverse(root->left, prev_value);
        bool root_valid = prev_value < root->val;
        prev_value = root->val;

        return left_tree_valid && root_valid && traverse(root->right, prev_value);
    }
};
comments powered by Disqus