📖 Scenario: You are working with a simple binary tree structure in JavaScript. Your task is 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 program that creates a binary tree, sets up a helper function to check BST rules, and then prints whether the tree is a valid BST or not.
📋 What You'll Learn
Create a binary tree with exact nodes and values
Add a helper function to validate BST rules
Use recursion to check the tree
Print 'true' if the tree is a BST, otherwise 'false'
💡 Why This Matters
🌍 Real World
Checking if a tree is a BST is important in databases and search algorithms where data needs to be organized for fast lookup.
💼 Career
Understanding BST validation helps in roles like software development and data engineering where tree data structures are common.
Progress0 / 4 steps
1
Create the binary tree nodes
Create a class called Node with a constructor that takes value, left, and right. Then create a tree with root node value 10, left child 5, and right child 15. Assign the root node to a variable called root.
DSA Javascript
Hint
Start by defining a Node class with a constructor. Then create the root node with value 10, and its left and right children with values 5 and 15.
2
Add helper function to check BST validity
Create a function called isBST that takes a node, a min value, and a max value. Initialize min and max to -Infinity and Infinity respectively when first called. The function should return false if the node value is not between min and max. Otherwise, recursively check the left subtree with updated max and the right subtree with updated min. Return true if all checks pass.
DSA Javascript
Hint
Use recursion to check if each node's value fits between min and max. Update these limits as you go down the tree.
3
Call the helper function with the root node
Create a variable called result and assign it the value returned by calling isBST with the root node.
DSA Javascript
Hint
Call isBST with the root node and store the answer in result.
4
Print the result
Print the value of the variable result using console.log.
DSA Javascript
Hint
Use console.log(result) to show 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. Every node's left child is smaller and right child is larger than the node
C. All nodes have the same value
D. The tree is balanced with equal height on both sides
Solution
Step 1: Understand BST property
A BST requires that for each node, all nodes in the left subtree have smaller values and all nodes in the right subtree have larger values.
Step 2: Compare options with definition
Every node's left child is smaller and right child is larger than the node correctly states this property. Other options describe different tree properties.
Final Answer:
Every node's left child is smaller and right child is larger than the node -> Option B
Quick Check:
BST property = Every node's left child is smaller and right child is larger than the node [OK]
Hint: BST means left < node < right for every node [OK]
Common Mistakes:
Confusing BST with balanced tree
Thinking all nodes must have two children
Assuming all values are equal
2. Which of the following JavaScript function signatures is correct to check if a binary tree is a BST?
easy
A. function isBST(node, min, max) {}
B. function isBST(node, left, right, parent) {}
C. function checkBST(root) {}
D. function validateBST(tree, minVal) {}
Solution
Step 1: Identify common BST validation parameters
To validate BST, we usually pass the current node and allowed min and max values to check constraints.
Step 2: Match function signatures
function isBST(node, min, max) {} matches this pattern with node, min, and max parameters. Others have extra or missing parameters.
Final Answer:
function isBST(node, min, max) {} -> Option A
Quick Check:
Correct BST function signature = function isBST(node, min, max) {} [OK]
Hint: Use min and max limits to check BST recursively [OK]
Common Mistakes:
Adding unnecessary parameters
Missing min or max limits
Using wrong parameter names
3. What will be the output of the following code snippet?
class Node {
constructor(val, left = null, right = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
function isBST(node, min = -Infinity, max = Infinity) {
if (!node) return true;
if (node.val <= min || node.val >= max) return false;
return isBST(node.left, min, node.val) && isBST(node.right, node.val, max);
}
const root = new Node(10, new Node(5), new Node(15, new Node(6), new Node(20)));
console.log(isBST(root));
medium
A. undefined
B. true
C. false
D. TypeError
Solution
Step 1: Analyze tree structure
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 left child of 15 but 6 < 10, which violates BST property because all right subtree nodes must be > 10.
Final Answer:
false -> Option C
Quick Check:
6 in right subtree < 10 breaks BST = false [OK]
Hint: Check if left < node < right recursively [OK]
Common Mistakes:
Ignoring subtree value constraints
Assuming all children just compare with parent
Missing base case for null nodes
4. Find the bug in this BST validation function and select the fix:
function isBST(node) {
if (!node) return true;
if (node.left && node.left.val >= node.val) return false;
if (node.right && node.right.val <= node.val) return false;
return isBST(node.left) && isBST(node.right);
}
medium
A. Add min and max parameters to track value ranges
B. Change >= to > and <= to < in comparisons
C. Return false if node is null
D. Remove recursive calls to isBST
Solution
Step 1: Understand current checks
Function only compares immediate children with current node, missing subtree constraints.
Step 2: Identify fix
To correctly validate BST, function must track allowed min and max values for each subtree, not just immediate children.
Final Answer:
Add min and max parameters to track value ranges -> Option A
Quick Check:
Use min/max limits to validate BST correctly [OK]
Hint: Use min/max limits, not just immediate child values [OK]
Common Mistakes:
Only checking immediate children
Ignoring subtree value constraints
Not using recursion properly
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 node.val <= min and node.val >= max checks in the recursive function.
hard
A. Allow duplicates by changing left subtree check to node.val < min and right subtree check to node.val > max
B. Allow duplicates on right by changing left subtree check to node.val <= min and right subtree check to node.val > max
C. Allow duplicates on right by changing left subtree check to node.val <= min and right subtree check to node.val >= max
D. Allow duplicates on right by changing left subtree check to node.val < min and right subtree check to node.val >= max
Solution
Step 1: Understand duplicates in BST
Allowing duplicates only on right means left subtree nodes must be strictly less than current node, right subtree nodes can be greater or equal.
Step 2: Adjust min/max checks accordingly
Left subtree check should be node.val < min (strictly less), right subtree check should be node.val >= max (allow equal).
Final Answer:
Allow duplicates on right by changing left subtree check to node.val < min and right subtree check to node.val >= max -> Option D
Quick Check:
Duplicates only right: left < node, right >= node [OK]
Hint: Strict less on left, allow equal on right for duplicates [OK]
Common Mistakes:
Allowing duplicates on both sides
Using non-strict inequalities on left subtree
Confusing min and max checks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.