Check if a tree is a BST or not
The problem
Given the root node of a binary tree. Return true if the given binary tree is a binary search tree(BST) else false.
A valid BST is defined as follows:
-
The left subtree of a node contains only nodes with key strictly less than the node's key.
-
The right subtree of a node contains only nodes with key strictly greater than the node's key.
-
Both the left and right subtrees must also be binary search trees.
Input : root = [5, 3, 6, 2, 4, null, 7] Output : true Explanation : Below is image of the given tree.
Input : root = [5, 3, 6, 4, 2, null, 7] Output : false Explanation : ****Below is image of the given tree. The node 4 and node 2 violates the BST rule of smaller to left and larger to right.
Input : root = [2, 1, 3]
- 1 <= Number of Nodes <= 104
- -231 <= Node.val <= 231 - 1
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int data;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int val) : data(val) , left(nullptr) , right(nullptr) {}
* };
**/
class Solution{
public:
bool isBST(TreeNode* root){
//your code goes here
}
};java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int data;
* TreeNode left;
* TreeNode right;
* TreeNode(int val) { data = val; left = null, right = null }
* }
**/
class Solution {
public boolean isBST(TreeNode root) {
//your code goes here
}
}python
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.data = val
# self.left = left
# self.right = right
class Solution:
def isBST(self, root):
#your code goes herejavascript
/**
* Definition for a binary tree node.
* class TreeNode {
* constructor(val = 0, left = null, right = null){
* this.data = val;
* this.left = null;
* this.right = null;
* }
* }
**/
class Solution {
isBST(root) {
//your code goes here
}
}csharp
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int data;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.data = val;
* this.left = left;
* this.right = right;
* }
* }
*/
public class Solution {
public bool IsBST(TreeNode root) {
}
}go
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Data int
* Left *TreeNode
* Right *TreeNode
* }
*/
func IsBST(root *TreeNode) bool {
//your code goes here
}Stuck? Show a way to structure it+
- 01Carry an exclusive lower and upper bound into each recursive call.
- 02Require every node to lie strictly within its bounds.
- 03Recurse left with the node as upper bound.
- 04Recurse right with the node as lower bound.
Reference answer
Then expect these follow-ups
How would you validate iteratively?
Tests: explicit stack
How do duplicate-key BST rules change the bounds?
Tests: spec interpretation
Hiring now
Software engineer roles are open right now
landed applies to roles like these for you, on each company’s own site, with answers written for the role.

Senior Software Engineer -.NET
Tyler Technologies · Annapolis, Maryland

Software Development Engineer II
SaaS Labs · Bengaluru, Karnataka, India

Advanced Software Engineer - Product Architect (Legal, Safety, and Risk)
Metropolitan Transportation Authority · New York, NY
Next question