> For the complete documentation index, see [llms.txt](https://coding-9.gitbook.io/untitled/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coding-9.gitbook.io/untitled/trees/bst/98.-validate-binary-search-tree.md).

# 98. Validate Binary Search Tree

## Problem Statement

<br>

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.

&#x20;

**Example 1:**

![](https://assets.leetcode.com/uploads/2020/12/01/tree1.jpg)

<pre><code><strong>Input: root = [2,1,3]
</strong><strong>Output: true
</strong></code></pre>

**Example 2:**

![](https://assets.leetcode.com/uploads/2020/12/01/tree2.jpg)

<pre><code><strong>Input: root = [5,1,4,null,null,3,6]
</strong><strong>Output: false
</strong><strong>Explanation: The root node's value is 5 but its right child's value is 4.
</strong></code></pre>

&#x20;

**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
```

### Links

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

### Video Links

### Approach 1:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
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);
    }
};
```

{% endcode %}

### Approach 2:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 3:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 4:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Similar Problems

###
