📖 Scenario: You are working with a Binary Search Tree (BST) that stores numbers in a way that smaller numbers are on the left and larger numbers are on the right. You want to find the kth smallest number in this tree, which means the number that would appear in position k if all numbers were sorted from smallest to largest.
🎯 Goal: Build a program that finds the kth smallest element in a given BST using an in-order traversal technique.
📋 What You'll Learn
Create a BST with the exact nodes given
Set a variable k to the exact value given
Write a function kthSmallest that finds the kth smallest element using in-order traversal
Print the kth smallest element exactly as shown
💡 Why This Matters
🌍 Real World
Finding the kth smallest element is useful in databases and search engines where you want to quickly find ranked data without sorting everything.
💼 Career
Understanding tree traversal and selection algorithms is important for software engineers working on data processing, optimization, and system design.
Progress0 / 4 steps
1
Create the BST nodes
Create a class called TreeNode with a constructor that takes val, left, and right. Then create the BST with these exact nodes and connections: root with value 5, root.left with value 3, root.right with value 6, root.left.left with value 2, root.left.right with value 4, root.left.left.left with value 1.
DSA Javascript
Hint
Remember to create the TreeNode class first, then build the tree by linking nodes as left and right children.
2
Set the value of k
Create a variable called k and set it to 3.
DSA Javascript
Hint
Just create a constant named k and assign it the value 3.
3
Write the kthSmallest function
Write a function called kthSmallest that takes root and k as parameters. Use an in-order traversal to find the kth smallest element. Use a helper function inside to traverse the tree and keep track of the count. Return the kth smallest value.
DSA Javascript
Hint
Use a helper function inorder to visit nodes in order. Increase a count each time you visit a node. When count equals k, save the node's value and stop.
4
Print the kth smallest element
Print the result of calling kthSmallest(root, k).
DSA Javascript
Hint
Use console.log to print the result of kthSmallest(root, k).
Practice
(1/5)
1. What does the Kth Smallest Element in BST problem ask you to find?
easy
A. The element that is the Kth smallest value in the binary search tree
B. The largest element in the binary search tree
C. The height of the binary search tree
D. The number of nodes in the binary search tree
Solution
Step 1: Understand the problem statement
The problem asks to find the element which is the Kth smallest in the BST, meaning if you list all elements in ascending order, pick the one at position K.
Step 2: Clarify what Kth smallest means in BST
Since BST stores smaller values on the left and larger on the right, an inorder traversal gives sorted order. The Kth element in this order is the answer.
Final Answer:
The element that is the Kth smallest value in the binary search tree -> Option A
Quick Check:
Kth smallest = element at position K in sorted BST [OK]
Hint: Inorder traversal of BST gives sorted order [OK]
Common Mistakes:
Confusing Kth smallest with Kth largest
Thinking it's about tree height
Counting nodes instead of values
2. Which of the following is the correct way to start an inorder traversal function in JavaScript for a BST node named root?
easy
A. function inorder(root) { while(root) { inorder(root.left); } }
B. function inorder(root) { if (root == null) return root.left; }
C. function inorder(root) { if (!root) return; inorder(root.left); ... }
D. function inorder(root) { root = root.left; inorder(root); }
Solution
Step 1: Check base case for recursion
function inorder(root) { if (!root) return; inorder(root.left); ... } correctly checks if root is null and returns to stop recursion.
Step 2: Verify recursive call order
function inorder(root) { if (!root) return; inorder(root.left); ... } calls inorder(root.left) before processing current node, which is correct for inorder traversal.
Final Answer:
function inorder(root) { if (!root) return; inorder(root.left); ... } -> Option C
Quick Check:
Base case + left recursion = correct inorder start [OK]
Hint: Use base case if null, then recurse left [OK]
Common Mistakes:
Using while loop instead of recursion
Returning wrong subtree
Not checking for null before recursion
3. What will be the output of the following code snippet to find the 3rd smallest element in the BST?
class Node {
constructor(val) {
this.val = val;
this.left = null;
this.right = null;
}
}
const root = new Node(5);
root.left = new Node(3);
root.right = new Node(7);
root.left.left = new Node(2);
root.left.right = new Node(4);
let count = 0;
let result = null;
function kthSmallest(node, k) {
if (!node) return;
kthSmallest(node.left, k);
count++;
if (count === k) {
result = node.val;
return;
}
kthSmallest(node.right, k);
}
kthSmallest(root, 3);
console.log(result);
medium
A. 4
B. 3
C. 5
D. 2
Solution
Step 1: Perform inorder traversal and count nodes
The inorder traversal visits nodes in order: 2, 3, 4, 5, 7. Counting visits: 1=2, 2=3, 3=4.
Step 2: Identify the 3rd visited node
The 3rd node visited is 4, so result is set to 4.
Final Answer:
4 -> Option A
Quick Check:
Inorder order: 2,3,4... 3rd is 4 [OK]
Hint: Inorder traversal order gives sorted nodes [OK]
Common Mistakes:
Counting before left subtree traversal
Not stopping after finding kth element
Confusing node values with count
4. The following code is intended to find the Kth smallest element in a BST, but it has a bug. What is the bug?
function kthSmallest(root, k) {
let count = 0;
let result = null;
function inorder(node) {
if (!node) return;
inorder(node.left);
count++;
if (count === k) return node.val;
inorder(node.right);
}
result = inorder(root);
return result;
}
medium
A. The base case is missing
B. The recursive calls do not return the found value properly
C. The count variable is not incremented
D. The function does not traverse the right subtree
Solution
Step 1: Analyze return values in recursion
The function returns node.val when count matches k, but does not propagate this value back up the recursive calls.
Step 2: Identify missing return propagation
Without returning the found value from left or right recursive calls, the final result will be undefined.
Final Answer:
The recursive calls do not return the found value properly -> Option B
Quick Check:
Return values must propagate up recursion [OK]
Hint: Return found value from all recursive calls [OK]
Common Mistakes:
Ignoring return values in recursion
Not incrementing count correctly
Missing base case check
5. Given a BST with nodes inserted in this order: [6, 2, 8, 0, 4, 7, 9, 3, 5], what is the 5th smallest element?