🚀Day 10. Check for BST 🧠

The problem can be found at the following link: Question Link

💡 Problem Description:

Given the root of a binary tree, check whether it is a Binary Search Tree (BST) or not.

Definition of BST:

  • 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.

  • Note: BSTs cannot contain duplicate nodes.

🔍 Example Walkthrough:

Example 1:

Input:

root = [2, 1, 3, N, N, N, 5]

Output:

Explanation:

  • The left subtree of every node contains smaller keys and right subtree of every node contains greater keys. Hence, it is a BST.

Example 2:

Input:

root = [2, N, 7, N, 6, N, 9]

Output:

Explanation:

  • Since the node to the right of node with key 7 has lesser key value, Hence, it is not a BST.

Example 3:

Input:

root = [10, 5, 20, N, N, 9, 25]

Output:

Explanation:

  • The node with key 9 present in the right subtree has lesser key value than root node. Hence, it is not a BST.

Constraints:

  • 1 ≤ Number of nodes ≤ $10^5$

  • 1 ≤ node->data ≤ $10^9$

🎯 My Approach:

Min–Max Recursion (Top-Down Approach)

  1. Base Case:

    • If the current node is NULL, return true (an empty tree is a valid BST).

  2. Check Current Node:

    • The current node’s value should be greater than the min value and less than the max value.

  3. Recursive Calls:

    • Recursively check the left subtree with the updated range [min, node->data].

    • Recursively check the right subtree with the updated range [node->data, max].

  4. Return Result:

    • The tree is a BST only if both left and right subtrees are BSTs.

🕒 Time and Auxiliary Space Complexity

  • Expected Time Complexity: O(N) We visit each node exactly once, performing constant-time operations at each step.

  • Expected Auxiliary Space Complexity: O(H) Due to the recursion stack, where H is the height of the tree. In the worst case (skewed tree), H = N. In the best case (balanced tree), H = log N.

📝 Solution Code

Code (C++)

🌲 Alternative Approaches

2️⃣ Inorder Traversal (Recursive)

  • Perform an inorder traversal to produce a list of values.

  • A BST’s inorder traversal should result in a strictly increasing sequence.

  • If the sequence is not increasing, the tree is not a BST.

3️⃣ Iterative Inorder Traversal (Using Stack)

  • Instead of recursion, use a stack to simulate inorder traversal.

  • Compare each node’s value with the previous node’s value to check for the BST property.

📊 Comparison of Approaches

Approaches

⏱️ Time Complexity

🗂️ Space Complexity

Method

Pros

⚠️ Cons

1️⃣ Min–Max Recursion

🟢 O(N)

🟡 O(H)

Recursive (Min–Max)

Fastest; no extra storage

Recursive depth may cause stack overflow

2️⃣ Inorder Traversal (Recursive)

🟢 O(N)

🟡 O(N)

Recursive Inorder

Simple implementation; easy to understand

Requires extra space for storing nodes

3️⃣ Iterative Inorder Traversal

🟢 O(N)

🟡 O(H)

Stack-based DFS

Avoids recursion stack overflow

Code complexity is slightly higher

💡 Best Choice?

  • For Balanced Trees / Small Depth:Approach 1 (Min–Max Recursion) is the fastest and most efficient.

  • For Deep or Skewed Trees (Risk of Stack Overflow):Approach 3 (Iterative Inorder Traversal) handles deep recursion better.

  • For Simple Understanding & Learning:Approach 2 (Inorder Traversal Recursive) is the most intuitive to grasp.

Code (Java)

Code (Python)

🎯 Contribution and Support:

For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Let’s make this learning journey more collaborative!

⭐ If you find this helpful, please give this repository a star! ⭐


📍Visitor Count

Last updated