π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:
true
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:
false
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:
false
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)
Base Case:
If the current node is
NULL
, returntrue
(an empty tree is a valid BST).
Check Current Node:
The current nodeβs value should be greater than the
min
value and less than themax
value.
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]
.
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, whereH
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++)
class Solution {
public:
bool isBST(Node* root, int min = INT_MIN, int max = INT_MAX) {
return !root || (root->data > min && root->data < max &&
isBST(root->left, min, root->data) &&
isBST(root->right, root->data, max));
}
};
Code (Java)
class Solution {
boolean isBST(Node root) {
return isBST(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
boolean isBST(Node node, int min, int max) {
return node == null || (node.data > min && node.data < max &&
isBST(node.left, min, node.data) &&
isBST(node.right, node.data, max));
}
}
Code (Python)
class Solution:
def isBST(self, root, min_val=float('-inf'), max_val=float('inf')):
return not root or (min_val < root.data < max_val and
self.isBST(root.left, min_val, root.data) and
self.isBST(root.right, root.data, max_val))
π― 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