98. Validate Binary Search Tree

Problem Statement

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 less than the node's key.

  • The right subtree of a node contains only nodes with keys greater than the node's key.

  • Both the left and right subtrees must also be binary search trees.

Example 1:

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

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.

Constraints:

  • The number of nodes in the tree is in the range [1, 104].

  • -231 <= Node.val <= 231 - 1

Intuition

Approach:

We Take min and max value at each level and 
Modify the vals as we go left and right

For eg
   5
 1   6

At start -> INT_MIN, INT_MAX (for 5)
When we go left,

INT_MIN, 5
And so on

We might get a test case problem for INT_MIN , and INT_MAX itself

So taken LLONG_MIN and MAX

https://leetcode.com/problems/validate-binary-search-tree/description/

Approach 1:

C++
class Solution {
public:
    bool find_ans(TreeNode* root, long long low, long long high){
        if(root == nullptr)
            return true;
        
        int value = root->val;
        if(low>=value or value>=high)
            return false;

        if(!find_ans(root->left, low, root->val))
            return false;
        if(!find_ans(root->right, root->val, high))
            return false;

        return true;
    }

    bool isValidBST(TreeNode* root) {
        return find_ans(root, LLONG_MIN, LLONG_MAX);
    }
};

Approach 2:

C++

Approach 3:

C++

Approach 4:

C++

Similar Problems

Last updated