What is the inorder predecessor in a Binary Search Tree (BST)?
The inorder predecessor of a node in a BST is the node that comes immediately before it in the inorder traversal. It is the largest node smaller than the given node.
Click to reveal answer
beginner
How do you find the inorder predecessor if the node has a left subtree?
If the node has a left subtree, the inorder predecessor is the rightmost (maximum) node in that left subtree.
Click to reveal answer
intermediate
What if the node does not have a left subtree? How to find its inorder predecessor?
If the node has no left subtree, move up the tree using parent pointers until you find a node which is the right child of its parent. That parent is the inorder predecessor.
Click to reveal answer
intermediate
Why is the inorder predecessor important in BST operations?
It helps in operations like deletion of a node by replacing the node with its inorder predecessor to maintain BST properties.
Click to reveal answer
beginner
In inorder traversal, what is the order of nodes visited?
Inorder traversal visits nodes in ascending order: left subtree, current node, then right subtree.
Click to reveal answer
What is the inorder predecessor of a node with a left subtree in a BST?
AThe leftmost node in the right subtree
BThe parent node
CThe root node
DThe rightmost node in the left subtree
✗ Incorrect
The inorder predecessor is the rightmost (maximum) node in the left subtree.
If a node has no left subtree, how do you find its inorder predecessor?
AFind the leftmost node in the right subtree
BMove up until you find a node that is the right child of its parent
CIt has no inorder predecessor
DMove down to the leftmost leaf
✗ Incorrect
You move up the tree until you find a node that is the right child of its parent; that parent is the inorder predecessor.
Why do we use the inorder predecessor in BST deletion?
ATo find the root node
BTo find the smallest node in the tree
CTo replace a node with a node smaller than it to maintain BST order
DTo balance the tree
✗ Incorrect
Replacing a node with its inorder predecessor ensures the BST property is maintained after deletion.
In inorder traversal, which order are nodes visited?
ALeft subtree, current node, right subtree
BCurrent node, left subtree, right subtree
CRight subtree, current node, left subtree
DRight subtree, left subtree, current node
✗ Incorrect
Inorder traversal visits nodes in the order: left subtree, current node, then right subtree.
What is the inorder predecessor of the smallest node in a BST?
ANo inorder predecessor (null)
BThe root node
CItself
DThe rightmost node
✗ Incorrect
The smallest node has no inorder predecessor because no smaller node exists.
Explain how to find the inorder predecessor of a node in a BST with and without a left subtree.
Think about the inorder traversal order and how predecessor relates to it.
You got /2 concepts.
Describe why the inorder predecessor is useful when deleting a node from a BST.
Consider how BST structure must remain sorted after deletion.
You got /3 concepts.
Practice
(1/5)
1. What is the inorder predecessor of a node in a Binary Search Tree (BST)?
easy
A. The node with the largest value smaller than the given node
B. The node with the smallest value larger than the given node
C. The left child of the given node
D. The right child of the given node
Solution
Step 1: Understand inorder traversal order
Inorder traversal visits nodes in ascending order for BST, so predecessor is the previous node in this order.
Step 2: Define inorder predecessor
The inorder predecessor is the node with the largest value smaller than the current node's value.
Final Answer:
The node with the largest value smaller than the given node -> Option A
Quick Check:
Inorder predecessor = largest smaller value [OK]
Hint: Predecessor is just before current node in sorted order [OK]
Common Mistakes:
Confusing predecessor with successor
Thinking predecessor is always left child
Assuming predecessor is the parent node
2. Which of the following Python code snippets correctly finds the inorder predecessor of a node with a left subtree in a BST?
easy
A. temp = node.right
while temp.right:
temp = temp.right
return temp
B. temp = node.right
while temp.left:
temp = temp.left
return temp
C. temp = node.left
while temp.left:
temp = temp.left
return temp
D. temp = node.left
while temp.right:
temp = temp.right
return temp
Solution
Step 1: Identify inorder predecessor logic for left subtree
If node has left child, predecessor is the rightmost node in left subtree.
Step 2: Check code correctness
Code D moves to left child, then goes right as far as possible, correctly finding predecessor.
Final Answer:
Code snippet D correctly finds the inorder predecessor -> Option D
Quick Check:
Left subtree's rightmost node = predecessor [OK]
Hint: Go left once, then right as far as possible [OK]
Common Mistakes:
Going right subtree instead of left
Going left repeatedly instead of right in left subtree
Returning left child directly without traversal
3. Given the BST below and the node with value 15, what is the inorder predecessor?
20
/ \
10 30
\ \
15 40
medium
A. 20
B. 15
C. 10
D. None
Solution
Step 1: Locate node 15 and check left subtree
Node 15 has no left child, so predecessor is ancestor smaller than 15.
Step 2: Find nearest ancestor smaller than 15
Ancestor 10 is smaller than 15 and is the closest on path to root.
Final Answer:
10 -> Option C
Quick Check:
Predecessor of 15 is 10 [OK]
Hint: If no left child, go up to smaller ancestor [OK]
Common Mistakes:
Choosing 20 which is larger
Choosing node itself as predecessor
Assuming predecessor is None without checking ancestors
4. The following code attempts to find the inorder predecessor of a node in a BST but has a bug. What is the bug?
def inorder_predecessor(root, node):
if node.left:
temp = node.left
while temp.left:
temp = temp.left
return temp
else:
predecessor = None
while root:
if node.val > root.val:
predecessor = root
root = root.right
else:
root = root.left
return predecessor
medium
A. The else block incorrectly updates predecessor
B. The while loop should check temp.right, not temp.left
C. The function does not handle empty tree
D. The function should return None if node has no left child
Solution
Step 1: Analyze left subtree traversal
In left subtree, predecessor is rightmost node, so loop should go right, not left.
Step 2: Identify correct traversal direction
Changing while temp.left to while temp.right fixes the bug.
Final Answer:
The while loop should check temp.right, not temp.left -> Option B
Quick Check:
Predecessor in left subtree = rightmost node [OK]
Hint: Go right in left subtree, not left [OK]
Common Mistakes:
Looping left instead of right in left subtree
Ignoring else block logic
Not returning predecessor correctly
5. You want to find the inorder predecessor of a node in a BST that does NOT have a left child. Which approach correctly finds the predecessor?
hard
A. Traverse from root, track the last node smaller than current node
B. Return the rightmost node in the left subtree
C. Return the parent node if it is smaller than the current node
D. Return the left child of the current node
Solution
Step 1: Understand no left child case
If node has no left child, predecessor is an ancestor smaller than node.
Step 2: Use root traversal to track predecessor
Traverse from root, update predecessor when node value is greater than root's value.
Step 3: Return last tracked smaller ancestor
This gives the inorder predecessor correctly.
Final Answer:
Traverse from root, track the last node smaller than current node -> Option A
Quick Check:
No left child -> track smaller ancestor [OK]
Hint: Track last smaller ancestor from root [OK]
Common Mistakes:
Returning parent without checking value
Returning left child when none exists
Trying to find predecessor in left subtree when none exists
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.