Bird
Raised Fist0
DSA Rustprogramming~10 mins

Kth Smallest Element in BST in DSA Rust - Execution Trace

Choose your learning style10 modes available
Concept Flow - Kth Smallest Element in BST
Start at root node
↓
Traverse left subtree
↓
Visit current node
↓
Count visited nodes
↓
Is count == k?
No→Traverse right subtree
Yes↓
Return current node value
↓
Done
We go left as far as possible, visit nodes in order, count them, and stop when we reach the kth node.
Execution Sample
DSA Rust
fn kth_smallest(root: &Option<Box<TreeNode>>, k: &mut i32) -> i32 {
    if let Some(node) = root {
        let left = kth_smallest(&node.left, k);
        if *k == 0 { return left; }
        *k -= 1;
        if *k == 0 { return node.val; }
        return kth_smallest(&node.right, k);
    }
    -1
}
This code visits nodes in ascending order and returns the kth smallest value.
Execution Table
StepOperationCurrent Nodek ValueActionVisual State
1Start at root53Go left subtree5 / 3 7
2Go left33Go left subtree5 / 3 7
3Go left23Go left subtree (None)5 / 3 7 / 2
4None nodeNone3Return -15 / 3 7 / 2
5Visit node23k=3->2, continue5 / 3 7 / 2
6Go rightNone2Return -15 / 3 7 / 2
7Back to node32k=2->1, continue5 / 3 7 / 2
8Go right41Go left subtree (None)5 / 3 7 / 2 4
9None nodeNone1Return -15 / 3 7 / 2 4
10Visit node41k=1->0, return 45 / 3 7 / 2 4
11Return result40Return 4 up the call stack5 / 3 7 / 2 4
12StopN/A0k reached 0, found kth smallest5 / 3 7 / 2 4
💡 k reached 0 at node with value 4, so 4 is the 3rd smallest element.
Variable Tracker
VariableStartAfter Step 5After Step 7After Step 10Final
k32100
Current Node52344
Key Moments - 3 Insights
Why do we decrement k only after visiting a node?
Because k counts how many nodes we have visited in order. See execution_table step 5 and 7 where k decreases after visiting nodes 2 and 3.
Why do we return immediately when k reaches zero?
Because the kth smallest element is found. In execution_table step 10, k becomes 0 at node 4, so we return 4 immediately.
Why do we traverse left subtree first?
Because in a BST, left subtree nodes are smaller. Visiting left first ensures ascending order. See execution_table steps 1-3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of k after visiting node 3 at step 7?
A1
B2
C0
D3
💡 Hint
Check the 'k Value' column at step 7 in execution_table.
At which step does the function find the kth smallest element?
AStep 5
BStep 10
CStep 3
DStep 12
💡 Hint
Look for when k reaches 0 and a value is returned in execution_table.
If k was 1 instead of 3 at start, what would be the returned value?
A3
B4
C2
D5
💡 Hint
With k=1, the first visited node is the smallest. Check variable_tracker and execution_table steps 3-5.
Concept Snapshot
Kth Smallest Element in BST:
- Traverse left subtree first (smaller values).
- Visit node and decrement k.
- When k == 0, return node value.
- Traverse right subtree if needed.
- Uses in-order traversal for ascending order.
Full Transcript
To find the kth smallest element in a binary search tree, we do an in-order traversal: go left, visit node, then right. We keep a count k of how many nodes we have visited. Each time we visit a node, we decrease k by one. When k reaches zero, we have found the kth smallest element and return its value. The traversal stops immediately after finding this element. This method works because in-order traversal visits nodes in ascending order in a BST.

Practice

(1/5)
1. What does the Kth Smallest Element in BST problem ask you to find?
easy
A. The largest element in the BST
B. The element that is the Kth smallest when the BST elements are sorted
C. The root node of the BST
D. The height of the BST

Solution

  1. Step 1: Understand BST property

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

    The Kth smallest element is the element that appears in position K when all elements are sorted in ascending order.
  3. Final Answer:

    The element that is the Kth smallest when the BST elements are sorted -> Option B
  4. Quick Check:

    Kth smallest = Kth element in sorted order [OK]
Hint: Think sorted order of BST nodes in ascending order [OK]
Common Mistakes:
  • Confusing Kth smallest with largest element
  • Thinking root is always Kth smallest
  • Mixing up height with element value
2. Which Rust code snippet correctly defines a BST node struct for the Kth smallest element problem?
easy
A. struct TreeNode { val: i32, left: Option, right: Option }
B. struct TreeNode { val: i32, left: TreeNode, right: TreeNode }
C. struct TreeNode { val: i32, left: &TreeNode, right: &TreeNode }
D. struct TreeNode { val: i32, left: Option<TreeNode>, right: Option<TreeNode> }

Solution

  1. Step 1: Understand Rust ownership for trees

    Rust requires heap allocation for recursive types, so child nodes use Box wrapped in Option for nullable children.
  2. Step 2: Check each struct definition

    Option is correct; direct TreeNode fields cause infinite size; references need lifetimes and are not owned.
  3. Final Answer:

    struct TreeNode { val: i32, left: Option, right: Option } -> Option A
  4. Quick Check:

    Use Option for child nodes [OK]
Hint: Use Option for recursive tree nodes in Rust [OK]
Common Mistakes:
  • Using direct TreeNode fields causing infinite size error
  • Using references without lifetimes
  • Not wrapping children in Option for nullability
3. Given this Rust code snippet for inorder traversal to find the Kth smallest element, what will be printed?
fn inorder(root: &Option, k: &mut i32, result: &mut Option<i32>) {
    if let Some(node) = root {
        inorder(&node.left, k, result);
        *k -= 1;
        if *k == 0 {
            *result = Some(node.val);
            return;
        }
        inorder(&node.right, k, result);
    }
}

// BST: 3 <- 5 -> 7, k = 2
let root = Some(Box::new(TreeNode { val: 5, left: Some(Box::new(TreeNode { val: 3, left: None, right: None })), right: Some(Box::new(TreeNode { val: 7, left: None, right: None })) }));
let mut k = 2;
let mut result = None;
inorder(&root, &mut k, &mut result);
println!("{:?}", result);
medium
A. Some(5)
B. Some(3)
C. Some(7)
D. None

Solution

  1. Step 1: Perform inorder traversal on BST

    Inorder visits nodes in ascending order: 3, 5, 7.
  2. Step 2: Decrement k and check when k == 0

    Visit 3: k=2->1; Visit 5: k=1->0, result=5, stop traversal.
  3. Final Answer:

    Some(5) -> Option A
  4. Quick Check:

    2nd smallest in [3,5,7] is 5 [OK]
Hint: Inorder traversal gives sorted order; pick Kth visited node [OK]
Common Mistakes:
  • Confusing preorder or postorder with inorder
  • Not decrementing k correctly
  • Not stopping traversal after finding Kth element
4. Identify the bug in this Rust function to find the Kth smallest element in a BST:
fn kth_smallest(root: &Option, k: &mut i32) -> Option<i32> {
    if let Some(node) = root {
        let left = kth_smallest(&node.left, k);
        *k -= 1;
        if *k == 0 {
            return Some(node.val);
        }
        let right = kth_smallest(&node.right, k);
        return right;
    }
    None
}
medium
A. The function does not handle the case when k is initially zero
B. The function does not decrement k before checking left subtree
C. The function does not return None when root is None
D. The function does not stop traversal after finding the Kth element

Solution

  1. Step 1: Analyze traversal and return logic

    The function returns Some(value) when Kth element found, but recursive calls continue after that.
  2. Step 2: Check if traversal stops after finding Kth element

    Because recursive calls continue, traversal does not stop immediately, causing unnecessary work or wrong results.
  3. Final Answer:

    The function does not stop traversal after finding the Kth element -> Option D
  4. Quick Check:

    Traversal must stop once Kth element found [OK]
Hint: Stop recursion immediately after finding Kth element [OK]
Common Mistakes:
  • Not returning early after finding Kth element
  • Incorrect k decrement order
  • Ignoring None base case
5. You have a BST with nodes inserted in this order: 6, 2, 8, 0, 4, 7, 9, 3, 5. What is the 4th smallest element in this BST?
hard
A. 6
B. 5
C. 4
D. 3

Solution

  1. Step 1: List BST elements in sorted order

    Inorder traversal of BST gives sorted nodes: 0, 2, 3, 4, 5, 6, 7, 8, 9.
  2. Step 2: Identify 4th smallest element

    The 4th element in this sorted list is 4.
  3. Final Answer:

    4 -> Option C
  4. Quick Check:

    Sorted nodes: 0,2,3,4,... 4th is 4 [OK]
Hint: Inorder traversal lists BST nodes sorted; pick Kth element [OK]
Common Mistakes:
  • Counting nodes incorrectly
  • Confusing insertion order with sorted order
  • Off-by-one errors in K counting
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