What if you could instantly know if your tree is perfectly organized without guessing?
Why Validate if Tree is BST in DSA Javascript?
Imagine you have a family tree drawn on paper, and you want to check if it follows a special rule: every child on the left is smaller than the parent, and every child on the right is bigger. Doing this by looking at each person and comparing them manually is tiring and confusing.
Checking each node by hand means you might miss some mistakes or get confused about which numbers to compare. It takes a lot of time and you can easily make errors, especially if the tree is big or complicated.
Using a smart method to check the tree automatically saves time and avoids mistakes. This method looks at each node and makes sure it fits the rule by comparing it with allowed minimum and maximum values, moving down the tree step by step.
function isBST(node) {
if (!node) return true;
if (node.left && node.left.value >= node.value) return false;
if (node.right && node.right.value <= node.value) return false;
return isBST(node.left) && isBST(node.right);
}function isBST(node, min = -Infinity, max = Infinity) {
if (!node) return true;
if (node.value <= min || node.value >= max) return false;
return isBST(node.left, min, node.value) && isBST(node.right, node.value, max);
}This lets you quickly and correctly check if a tree follows the special order rules, even for very large trees.
When building a search system, you want to make sure your data is organized correctly so you can find things fast. Checking if your tree is a BST helps keep your search system working well.
Manual checking is slow and error-prone.
Using min/max limits helps verify the tree correctly.
This method works well even for big trees.
Practice
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 BQuick Check:
BST property = Every node's left child is smaller and right child is larger than the node [OK]
- Confusing BST with balanced tree
- Thinking all nodes must have two children
- Assuming all values are equal
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 AQuick Check:
Correct BST function signature = function isBST(node, min, max) {} [OK]
- Adding unnecessary parameters
- Missing min or max limits
- Using wrong parameter names
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));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 CQuick Check:
6 in right subtree < 10 breaks BST = false [OK]
- Ignoring subtree value constraints
- Assuming all children just compare with parent
- Missing base case for null nodes
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);
}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 AQuick Check:
Use min/max limits to validate BST correctly [OK]
- Only checking immediate children
- Ignoring subtree value constraints
- Not using recursion properly
node.val <= min and node.val >= max checks in the recursive function.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 benode.val < min(strictly less), right subtree check should benode.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 DQuick Check:
Duplicates only right: left < node, right >= node [OK]
- Allowing duplicates on both sides
- Using non-strict inequalities on left subtree
- Confusing min and max checks
Ready to prove it?
Pass the test and this pattern moves unknown
