Bird
Raised Fist0
DSA Javaprogramming~10 mins

Kth Smallest Element in BST in DSA Java - Execution Trace

Choose your learning style10 modes available
Concept Flow - Kth Smallest Element in BST
Start at root
↓
Traverse left subtree
↓
Visit node (inorder)
↓
Count visited nodes
↓
Is count == k?
No→Traverse right subtree
Yes↓
Return node value
↓
Done
Traverse the BST in sorted order (left, node, right), count nodes visited, stop when count reaches k.
Execution Sample
DSA Java
int count = 0;
int result = -1;
void inorder(TreeNode node, int k) {
  if (node == null) return;
  inorder(node.left, k);
  count++;
  if (count == k) { result = node.val; return; }
  inorder(node.right, k);
}
Perform inorder traversal to find the kth smallest element by counting nodes visited.
Execution Table
StepOperationNode VisitedCountActionVisual State
1Start at root50Traverse left subtree5 / \ 3 7 / \ 2 4 8
2Traverse left subtree30Traverse left subtree3 / \ 2 4
3Traverse left subtree20Traverse left subtree2 (leaf)
4Visit node21Count=1, not k=3, traverse right subtree2 (leaf)
5Traverse right subtreenull1ReturnNo change
6Visit node32Count=2, not k=3, traverse right subtree3 / \ 2 4
7Traverse right subtree42Visit node4 (leaf)
8Visit node43Count=3 == k, set result=4, stop traversal4 (leaf)
9Stopnull3Traversal endsResult found: 4
💡 Traversal stops when count reaches k=3 at node with value 4.
Variable Tracker
VariableStartAfter Step 4After Step 6After Step 8Final
count01233
result-1-1-144
current node5234null
Key Moments - 3 Insights
Why do we stop traversal immediately after finding the kth smallest element?
Because once count equals k (see step 8 in execution_table), we have found the kth smallest node, so continuing traversal is unnecessary and inefficient.
Why do we traverse left subtree before visiting the node?
Inorder traversal visits nodes in ascending order: left subtree first, then node, then right subtree. This order ensures nodes are counted from smallest to largest (see steps 2 and 3).
What happens if k is larger than the number of nodes?
The traversal completes without count reaching k, so result remains -1 (or default). This means kth smallest does not exist in the tree.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'count' after visiting node 3?
A1
B2
C3
D0
💡 Hint
Check the 'Count' column at step 6 where node 3 is visited.
At which step does the traversal stop because the kth smallest element is found?
AStep 8
BStep 6
CStep 4
DStep 9
💡 Hint
Look for the step where count equals k and result is set in the execution_table.
If k was 2 instead of 3, what would be the result after traversal?
A4
B2
C3
D5
💡 Hint
Check variable_tracker for count and result values at steps before count=3.
Concept Snapshot
Kth Smallest Element in BST:
- Use inorder traversal (left, node, right)
- Count nodes visited during traversal
- When count == k, return node value
- Stops traversal early for efficiency
- Works because BST inorder is sorted order
Full Transcript
To find the kth smallest element in a Binary Search Tree (BST), we do an inorder traversal. This means we first visit the left subtree, then the current node, then the right subtree. We keep a count of how many nodes we have visited. When the count reaches k, we have found the kth smallest element. We then stop the traversal and return that node's value. This works because inorder traversal of a BST visits nodes in ascending order. The example traced shows visiting nodes 2, 3, and 4 in order, stopping at the third node visited, which is the kth smallest for k=3.

Practice

(1/5)
1. What does the term kth smallest element in a BST mean?
easy
A. The element with the kth highest frequency in the BST
B. The element that appears in the kth position when BST elements are sorted in ascending order
C. The element at the kth level of the BST
D. The element with the kth largest value in the BST

Solution

  1. Step 1: Understand BST property

    A Binary Search Tree (BST) stores elements so that left child is smaller and right child is larger.
  2. Step 2: Define kth smallest element

    The kth smallest element is the one that appears in the sorted order at position k.
  3. Final Answer:

    The element that appears in the kth position when BST elements are sorted in ascending order -> Option B
  4. Quick Check:

    kth smallest = kth in ascending order [OK]
Hint: Think of inorder traversal to get sorted order [OK]
Common Mistakes:
  • Confusing kth smallest with kth largest
  • Thinking kth smallest means kth level node
  • Mixing frequency with element order
2. Which of the following Java method signatures correctly represents a function to find the kth smallest element in a BST?
easy
A. public int kthSmallest(TreeNode root, int k)
B. public void kthSmallest(TreeNode root, int k)
C. public TreeNode kthSmallest(int k, TreeNode root)
D. public int kthSmallest(int k)

Solution

  1. Step 1: Check method parameters and return type

    The method should accept the BST root and integer k, and return the kth smallest element as int.
  2. Step 2: Match signature with correct order

    public int kthSmallest(TreeNode root, int k) matches: returns int, parameters (TreeNode root, int k).
  3. Final Answer:

    public int kthSmallest(TreeNode root, int k) -> Option A
  4. Quick Check:

    Return type int and parameters (root, k) [OK]
Hint: Return the element value, input root and k [OK]
Common Mistakes:
  • Using void return type instead of int
  • Swapping parameter order incorrectly
  • Missing root parameter
3. What will be the output of the following code snippet to find the 3rd smallest element in the BST?
class TreeNode {
  int val;
  TreeNode left, right;
  TreeNode(int v) { val = v; }
}

public class Solution {
  int count = 0;
  int result = -1;
  public int kthSmallest(TreeNode root, int k) {
    inorder(root, k);
    return result;
  }
  private void inorder(TreeNode node, int k) {
    if (node == null) return;
    inorder(node.left, k);
    count++;
    if (count == k) {
      result = node.val;
      return;
    }
    inorder(node.right, k);
  }

  public static void main(String[] args) {
    TreeNode root = new TreeNode(5);
    root.left = new TreeNode(3);
    root.right = new TreeNode(6);
    root.left.left = new TreeNode(2);
    root.left.right = new TreeNode(4);
    root.left.left.left = new TreeNode(1);
    Solution sol = new Solution();
    System.out.println(sol.kthSmallest(root, 3));
  }
}
medium
A. 5
B. 2
C. 4
D. 3

Solution

  1. Step 1: Perform inorder traversal to get sorted elements

    Inorder traversal order: 1, 2, 3, 4, 5, 6.
  2. Step 2: Identify the 3rd element in sorted order

    The 3rd smallest element is 3.
  3. Final Answer:

    3 -> Option D
  4. Quick Check:

    Sorted BST elements = [1,2,3,4,5,6], 3rd = 3 [OK]
Hint: Inorder traversal gives sorted order; pick kth element [OK]
Common Mistakes:
  • Confusing preorder or postorder with inorder
  • Off-by-one error in counting
  • Returning node instead of node value
4. Identify the bug in the following code that attempts to find the kth smallest element in a BST:
public int kthSmallest(TreeNode root, int k) {
  int count = 0;
  int result = -1;
  inorder(root, k, count, result);
  return result;
}

private void inorder(TreeNode node, int k, int count, int result) {
  if (node == null) return;
  inorder(node.left, k, count, result);
  count++;
  if (count == k) {
    result = node.val;
    return;
  }
  inorder(node.right, k, count, result);
}
medium
A. Primitive variables count and result are passed by value, so changes don't persist
B. The inorder traversal is missing the base case
C. The method should return void instead of int
D. The count variable should be reset to zero inside inorder

Solution

  1. Step 1: Understand Java parameter passing

    Primitive types like int are passed by value, so changes inside methods don't affect original variables.
  2. Step 2: Identify impact on count and result

    Since count and result are passed by value, their updates inside inorder do not persist outside, causing incorrect result.
  3. Final Answer:

    Primitive variables count and result are passed by value, so changes don't persist -> Option A
  4. Quick Check:

    Primitive int passed by value, no update outside method [OK]
Hint: Use class fields or wrappers to persist count and result [OK]
Common Mistakes:
  • Assuming primitives are passed by reference
  • Not using class variables or arrays for count/result
  • Ignoring base case in recursion
5. Given a BST where nodes can have duplicate values, how would you modify the standard kth smallest element algorithm to correctly find the kth smallest unique element?
hard
A. Count all nodes including duplicates normally during inorder traversal
B. Use preorder traversal instead of inorder traversal
C. Use inorder traversal and skip duplicates by comparing current node value with previous visited value
D. Store all values in a list and sort it to find kth unique element

Solution

  1. Step 1: Understand duplicates in BST

    Duplicates appear as repeated values; inorder traversal lists them in sorted order including duplicates.
  2. Step 2: Modify traversal to skip duplicates

    Track previous visited value; only increment count when current value differs to count unique elements.
  3. Step 3: Find kth unique element

    Increment count only for unique values; when count == k, return current node value.
  4. Final Answer:

    Use inorder traversal and skip duplicates by comparing current node value with previous visited value -> Option C
  5. Quick Check:

    Skip duplicates by comparing with previous value during inorder [OK]
Hint: Track previous value to count unique elements only [OK]
Common Mistakes:
  • Counting duplicates as separate elements
  • Using preorder traversal which is not sorted
  • Sorting all values outside traversal (inefficient)
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard