📖 Scenario: You are working with a simple tree structure used in a small app to store numbers. You want to check if this tree follows the rules of a Binary Search Tree (BST).A BST is a tree where for every node, all values in the left subtree are smaller, and all values in the right subtree are larger.
🎯 Goal: Build a TypeScript program that creates a tree, sets up helper variables, writes a function to check if the tree is a BST, and prints the result.
📋 What You'll Learn
Create a tree using a Node class with value, left, and right properties
Add a helper function to check if the tree is a BST
Use recursion to validate BST properties
Print true if the tree is a BST, otherwise false
💡 Why This Matters
🌍 Real World
Binary Search Trees are used in databases and search engines to quickly find data.
💼 Career
Understanding BST validation helps in roles involving data structures, algorithms, and software development.
Progress0 / 4 steps
1
Create the Tree Structure
Create a class called Node with a constructor that takes a value (number), and optional left and right nodes. Then create a tree variable called root with this exact structure: root = new Node(10, new Node(5), new Node(15))
DSA Typescript
Hint
Think of Node as a box holding a number and links to left and right boxes.
2
Add Helper Variables for Limits
Create two variables called minValue and maxValue and set them to Number.NEGATIVE_INFINITY and Number.POSITIVE_INFINITY respectively. These will help check the valid range for node values.
DSA Typescript
Hint
Use JavaScript's built-in Number.NEGATIVE_INFINITY and Number.POSITIVE_INFINITY for limits.
3
Write the BST Validation Function
Write a function called isBST that takes a node (Node or null), a min number, and a max number. It returns true if the subtree rooted at node is a BST within the range min to max. Use recursion to check left and right subtrees with updated ranges.
DSA Typescript
Hint
Check if current node's value is between min and max. Then check left subtree with updated max, and right subtree with updated min.
4
Print if the Tree is a BST
Use console.log to print the result of calling isBST with root, minValue, and maxValue.
DSA Typescript
Hint
Call console.log(isBST(root, minValue, maxValue)) to see if the tree is a BST.
Practice
(1/5)
1. What does it mean for a binary tree to be a Binary Search Tree (BST)?
easy
A. Every node has exactly two children
B. The tree is balanced with equal height on both sides
C. All nodes have the same value
D. Every node's left subtree has smaller values and right subtree has larger values
Solution
Step 1: Understand BST property
A BST requires that for each node, all values in the left subtree are smaller and all values in the right subtree are larger.
Step 2: Compare options with definition
Every node's left subtree has smaller values and right subtree has larger values matches the BST property exactly, while others describe different tree properties.
Final Answer:
Every node's left subtree has smaller values and right subtree has larger values -> Option D
Quick Check:
BST property = Every node's left subtree has smaller values and right subtree has larger values [OK]
Hint: Remember BST means left < node < right for all nodes [OK]
Common Mistakes:
Confusing BST with balanced tree
Thinking all nodes must have two children
Assuming all values are equal
2. Which TypeScript function signature correctly represents a function to check if a binary tree is a BST?
easy
A. function isBST(root: any): void
B. function isBST(root: TreeNode | null): boolean
C. function isBST(root: TreeNode): number
D. function isBST(root: number): boolean
Solution
Step 1: Identify correct parameter and return types
The function should accept a tree node or null and return a boolean indicating if it is a BST.
Step 2: Match options with correct signature
function isBST(root: TreeNode | null): boolean matches this: input is TreeNode or null, output is boolean. Others have wrong types or return types.
Final Answer:
function isBST(root: TreeNode | null): boolean -> Option B
Quick Check:
Correct signature = function isBST(root: TreeNode | null): boolean [OK]
Hint: Input is root node or null, output is true/false [OK]
Common Mistakes:
Using wrong parameter type like number
Returning number instead of boolean
Using void return type
3. What will be the output of the following TypeScript code snippet?
class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val: number, left: TreeNode | null = null, right: TreeNode | null = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
function isBST(root: TreeNode | null, min: number = -Infinity, max: number = Infinity): boolean {
if (!root) return true;
if (root.val <= min || root.val >= max) return false;
return isBST(root.left, min, root.val) && isBST(root.right, root.val, max);
}
const tree = new TreeNode(10, new TreeNode(5), new TreeNode(15, new TreeNode(6), new TreeNode(20)));
console.log(isBST(tree));
medium
A. SyntaxError
B. true
C. false
D. RuntimeError
Solution
Step 1: Analyze the tree structure
The root is 10, left child 5 (valid), right child 15 with left child 6 and right child 20.
Step 2: Check BST property on right subtree
Node 6 is in right subtree of 10 but less than 10, violating BST property. So function returns false.
Final Answer:
false -> Option C
Quick Check:
6 in right subtree < 10 = false [OK]
Hint: Check if left < node < right recursively [OK]
Common Mistakes:
Ignoring min/max constraints in recursion
Assuming all subtrees are BST without checks
Confusing node values in subtrees
4. Identify the bug in this TypeScript function to check if a tree is BST:
function isBST(root: TreeNode | null): boolean {
if (!root) return true;
if (root.left && root.left.val > root.val) return false;
if (root.right && root.right.val < root.val) return false;
return isBST(root.left) && isBST(root.right);
}
medium
A. It does not check the entire subtree values against min/max limits
B. It uses wrong comparison operators for left and right children
C. It returns true for null nodes incorrectly
D. It does not handle empty tree input
Solution
Step 1: Understand the function checks
The function only compares immediate children values with current node, not entire subtree ranges.
Step 2: Explain why this is a bug
BST requires all nodes in left subtree < current node and all in right subtree > current node, not just direct children.
Final Answer:
It does not check the entire subtree values against min/max limits -> Option A
Quick Check:
Missing min/max range check = It does not check the entire subtree values against min/max limits [OK]
Hint: Check full subtree ranges, not just immediate children [OK]
Common Mistakes:
Only comparing direct children values
Ignoring recursive min/max constraints
Assuming null nodes cause errors
5. Given a binary tree where nodes can have duplicate values, which modification to the BST validation logic allows duplicates only on the right subtree?
Choose the correct condition to replace root.val <= min in the validation function:
function isBST(root: TreeNode | null, min: number = -Infinity, max: number = Infinity): boolean {
if (!root) return true;
if (root.val <= min || root.val >= max) return false;
return isBST(root.left, min, root.val) && isBST(root.right, root.val, max);
}
hard
A. Change to root.val < min to allow duplicates on right
B. Change to root.val <= min and root.val < max
C. Change to root.val < min and root.val <= max
D. Change to root.val <= min and root.val <= max
Solution
Step 1: Understand duplicates on right subtree rule
Duplicates allowed only on right means left subtree nodes must be strictly less than current node, right subtree nodes greater than or equal.
Step 2: Adjust min/max comparisons accordingly
Replace root.val <= min with root.val < min. This fails only if strictly less than min (allows equal to min on right recursion), keeping root.val >= max for strict upper bound.
Final Answer:
Change to root.val < min to allow duplicates on right -> Option A
Quick Check:
Duplicates right subtree = Change to root.val < min [OK]
Hint: Use strict less on left, less or equal on right for duplicates [OK]
Common Mistakes:
Allowing duplicates on left subtree
Using <= on both sides
Not changing min/max checks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.