A BST Iterator allows us to traverse a Binary Search Tree (BST) in ascending order, one element at a time, without using extra space for storing all elements.
Click to reveal answer
intermediate
How does a BST Iterator typically store its state internally?
It uses a stack to keep track of nodes. The stack stores the path from the root to the current node, allowing the iterator to move to the next smallest element efficiently.
Click to reveal answer
intermediate
Explain the role of the 'next()' method in a BST Iterator.
The 'next()' method returns the next smallest element in the BST. It pops the top node from the stack, processes it, and then pushes all the left children of the popped node's right child onto the stack.
Click to reveal answer
beginner
What does the 'hasNext()' method indicate in a BST Iterator?
'hasNext()' returns True if there are still nodes left to visit in the BST (i.e., the stack is not empty), and False if all nodes have been visited.
Click to reveal answer
intermediate
Why is using a stack efficient for implementing a BST Iterator instead of storing all elements in a list?
Using a stack allows the iterator to use O(h) space, where h is the height of the tree, instead of O(n) space for storing all elements. This is more memory efficient, especially for large trees.
Click to reveal answer
What data structure is commonly used inside a BST Iterator to track nodes?
AStack
BQueue
CArray
DLinked List
✗ Incorrect
A stack is used to keep track of nodes along the path to the next smallest element.
What does the 'next()' method in a BST Iterator return?
AThe next largest element
BThe next smallest element
CThe root node
DThe last visited node
✗ Incorrect
'next()' returns the next smallest element in ascending order.
When does 'hasNext()' return False in a BST Iterator?
AWhen the stack is empty
BWhen the stack has one element
CWhen the tree is empty
DWhen the root is null
✗ Incorrect
'hasNext()' returns False when there are no more nodes to visit, meaning the stack is empty.
What is the space complexity of a BST Iterator using a stack?
AO(1)
BO(log n)
CO(n)
DO(h)
✗ Incorrect
The space complexity is O(h), where h is the height of the tree, because the stack stores nodes along one path.
Which traversal order does a BST Iterator follow?
APreorder
BPostorder
CInorder
DLevel order
✗ Incorrect
A BST Iterator traverses the tree in inorder to get elements in ascending order.
Describe how a BST Iterator uses a stack to return the next smallest element.
Think about how inorder traversal works using a stack.
You got /4 concepts.
Explain why a BST Iterator is more memory efficient than storing all elements in a list.
Consider the difference between storing all nodes vs. partial nodes.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of a BST Iterator in a binary search tree?
easy
A. To balance the BST automatically
B. To insert new nodes into the BST
C. To traverse the BST in ascending order without recursion
D. To delete nodes from the BST
Solution
Step 1: Understand BST Iterator functionality
A BST Iterator is designed to traverse the tree in sorted order, typically ascending, without using recursion.
Step 2: Identify the main purpose
It provides a way to get the next smallest element efficiently, which matches To traverse the BST in ascending order without recursion.
Final Answer:
To traverse the BST in ascending order without recursion -> Option C
Quick Check:
BST Iterator = In-order traversal without recursion [OK]
Hint: BST Iterator returns next smallest element step-by-step [OK]
Common Mistakes:
Confusing iterator with insertion or deletion
Thinking it balances the tree automatically
Assuming it uses recursion internally
2. Which of the following is the correct way to initialize a stack in Python for implementing a BST Iterator?
easy
A. stack = []
B. stack = {}
C. stack = ()
D. stack = set()
Solution
Step 1: Identify the correct data structure for stack
In Python, a stack is commonly implemented using a list, which supports push and pop operations.
Step 2: Match the syntax
An empty list is created with [], so stack = [] is correct.
Final Answer:
stack = [] -> Option A
Quick Check:
Stack uses list [] in Python [OK]
Hint: Use list [] for stack, not dict or set [OK]
Common Mistakes:
Using {} which creates a dictionary, not a stack
Using () which creates a tuple, immutable
Using set() which is unordered
3. What will be the output of the following code snippet using a BST Iterator?
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class BSTIterator:
def __init__(self, root):
self.stack = []
self._push_left(root)
def _push_left(self, node):
while node:
self.stack.append(node)
node = node.left
def next(self):
node = self.stack.pop()
self._push_left(node.right)
return node.val
root = TreeNode(2, TreeNode(1), TreeNode(3))
iterator = BSTIterator(root)
print(iterator.next())
print(iterator.next())
print(iterator.next())
medium
A. 2
1
3
B. 1
2
3
C. 3
2
1
D. 1
3
2
Solution
Step 1: Understand the BST structure and iterator initialization
The BST has root 2, left child 1, right child 3. The iterator pushes all left nodes starting from root, so stack = [2,1].
Step 2: Trace the next() calls
First next(): pop 1, push left of 1's right (None), output 1. Second next(): pop 2, push left of 2's right (3), stack = [3], output 2. Third next(): pop 3, push left of 3's right (None), output 3.
Final Answer:
1
2
3 -> Option B
Quick Check:
In-order traversal = 1, 2, 3 [OK]
Hint: BST Iterator outputs nodes in ascending order [OK]
Common Mistakes:
Confusing order of popping from stack
Not pushing left children of right subtree
Assuming preorder or postorder traversal
4. Identify the bug in this BST Iterator implementation:
class BSTIterator:
def __init__(self, root):
self.stack = []
self._push_left(root)
def _push_left(self, node):
while node:
self.stack.append(node)
node = node.right # Bug here
def next(self):
node = self.stack.pop()
self._push_left(node.right)
return node.val
medium
A. In _push_left, should traverse left child, not right child
B. Stack should be initialized as a set, not list
C. next() should return node.key instead of node.val
D. Missing base case for empty tree in __init__
Solution
Step 1: Analyze the _push_left method
The method is supposed to push all left children to the stack to simulate in-order traversal, but it incorrectly moves to the right child in the loop.
Step 2: Identify the correct traversal direction
It should move to the left child (node = node.left) to push left nodes, so In _push_left, should traverse left child, not right child is correct.
Final Answer:
In _push_left, should traverse left child, not right child -> Option A
Quick Check:
_push_left must go left, not right [OK]
Hint: Left subtree traversal uses node.left, not node.right [OK]
Common Mistakes:
Confusing left and right child traversal
Using set instead of list for stack
Returning wrong attribute from node
5. You want to design a BST Iterator that supports hasNext() and next() methods. Which approach best balances time and space complexity for large BSTs?
hard
A. Store all nodes in a list during initialization and iterate over it
B. Use recursion to traverse the BST each time next() is called
C. Store only the root node and traverse the tree from root every time
D. Use a stack to push left nodes on demand during iteration
Solution
Step 1: Evaluate storing all nodes upfront
Storing all nodes in a list uses O(n) space and time upfront, which is inefficient for large trees.
Step 2: Consider stack-based on-demand traversal
Using a stack to push left nodes only when needed uses O(h) space (h = tree height) and provides efficient next() calls.
Step 3: Analyze recursion and root-only traversal
Recursion each next() call is inefficient and root-only traversal repeats work, both are poor choices.
Final Answer:
Use a stack to push left nodes on demand during iteration -> Option D
Quick Check:
Stack-based lazy traversal balances time and space [OK]
Hint: Use stack for lazy traversal, not full list or recursion [OK]
Common Mistakes:
Preloading entire tree wastes memory
Using recursion repeatedly causes overhead
Restarting traversal from root wastes time
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.