Bird
Raised Fist0
DSA Pythonprogramming~20 mins

BST Delete Operation in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
BST Delete Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output after deleting a leaf node in BST
What is the printed state of the BST after deleting the leaf node with value 2?
DSA Python
class Node:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def insert(root, key):
    if root is None:
        return Node(key)
    if key < root.val:
        root.left = insert(root.left, key)
    else:
        root.right = insert(root.right, key)
    return root

def inorder(root, res):
    if root:
        inorder(root.left, res)
        res.append(root.val)
        inorder(root.right, res)

def deleteNode(root, key):
    if root is None:
        return root
    if key < root.val:
        root.left = deleteNode(root.left, key)
    elif key > root.val:
        root.right = deleteNode(root.right, key)
    else:
        if root.left is None:
            return root.right
        elif root.right is None:
            return root.left
        temp = root.right
        while temp.left:
            temp = temp.left
        root.val = temp.val
        root.right = deleteNode(root.right, temp.val)
    return root

root = None
for v in [5, 3, 7, 2, 4]:
    root = insert(root, v)
root = deleteNode(root, 2)
result = []
inorder(root, result)
print(result)
A[3, 4, 5, 7]
B[2, 3, 4, 5, 7]
C[3, 5, 7]
D[4, 5, 7]
Attempts:
2 left
💡 Hint
Deleting a leaf node removes it without affecting other nodes.
❓ Predict Output
intermediate
2:00remaining
Output after deleting a node with one child in BST
What is the printed state of the BST after deleting the node with value 3 which has one child?
DSA Python
class Node:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def insert(root, key):
    if root is None:
        return Node(key)
    if key < root.val:
        root.left = insert(root.left, key)
    else:
        root.right = insert(root.right, key)
    return root

def inorder(root, res):
    if root:
        inorder(root.left, res)
        res.append(root.val)
        inorder(root.right, res)

def deleteNode(root, key):
    if root is None:
        return root
    if key < root.val:
        root.left = deleteNode(root.left, key)
    elif key > root.val:
        root.right = deleteNode(root.right, key)
    else:
        if root.left is None:
            return root.right
        elif root.right is None:
            return root.left
        temp = root.right
        while temp.left:
            temp = temp.left
        root.val = temp.val
        root.right = deleteNode(root.right, temp.val)
    return root

root = None
for v in [5, 3, 7, 4]:
    root = insert(root, v)
root = deleteNode(root, 3)
result = []
inorder(root, result)
print(result)
A[3, 4, 5, 7]
B[4, 5, 7]
C[5, 7]
D[4, 7]
Attempts:
2 left
💡 Hint
Deleting a node with one child replaces it with its child.
❓ Predict Output
advanced
2:00remaining
Output after deleting a node with two children in BST
What is the printed state of the BST after deleting the node with value 3 which has two children?
DSA Python
class Node:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def insert(root, key):
    if root is None:
        return Node(key)
    if key < root.val:
        root.left = insert(root.left, key)
    else:
        root.right = insert(root.right, key)
    return root

def inorder(root, res):
    if root:
        inorder(root.left, res)
        res.append(root.val)
        inorder(root.right, res)

def deleteNode(root, key):
    if root is None:
        return root
    if key < root.val:
        root.left = deleteNode(root.left, key)
    elif key > root.val:
        root.right = deleteNode(root.right, key)
    else:
        if root.left is None:
            return root.right
        elif root.right is None:
            return root.left
        temp = root.right
        while temp.left:
            temp = temp.left
        root.val = temp.val
        root.right = deleteNode(root.right, temp.val)
    return root

root = None
for v in [5, 3, 7, 2, 4]:
    root = insert(root, v)
root = deleteNode(root, 3)
result = []
inorder(root, result)
print(result)
A[2, 3, 4, 5, 7]
B[4, 5, 7]
C[2, 4, 5, 7]
D[2, 5, 7]
Attempts:
2 left
💡 Hint
Deleting a node with two children replaces it with its inorder successor.
🔧 Debug
advanced
2:00remaining
Identify the error in BST delete function
What error will this code produce when deleting a node with two children?
DSA Python
def deleteNode(root, key):
    if root is None:
        return root
    if key < root.val:
        root.left = deleteNode(root.left, key)
    elif key > root.val:
        root.right = deleteNode(root.right, key)
    else:
        if root.left is None:
            return root.right
        elif root.right is None:
            return root.left
        temp = root.right
        while temp.left:
            temp = temp.left
        root.val = temp.val
        root.right = deleteNode(root.right, temp.val)
    return root
ANo error; code works correctly
BInfinite loop due to wrong traversal in finding successor
CAttributeError because temp might be None
DDeletes wrong node because it finds the rightmost instead of the leftmost node in the right subtree
Attempts:
2 left
💡 Hint
Check how the successor node is found in the right subtree.
🧠 Conceptual
expert
2:00remaining
Number of nodes after multiple deletions in BST
Given a BST with nodes inserted in this order: [10, 5, 15, 3, 7, 12, 18], after deleting nodes 5 and 15, how many nodes remain in the BST?
A7
B6
C4
D5
Attempts:
2 left
💡 Hint
Each deletion removes exactly one node.

Practice

(1/5)
1. What happens when you delete a leaf node (a node with no children) from a Binary Search Tree (BST)?
easy
A. The node's children are moved up to replace it.
B. The entire tree is rebuilt from scratch.
C. The node is simply removed without affecting other nodes.
D. The root node is always changed.

Solution

  1. Step 1: Understand leaf node deletion

    A leaf node has no children, so removing it does not affect other nodes.
  2. Step 2: Effect on BST structure

    Since no children exist, simply remove the node and update its parent's pointer to null.
  3. Final Answer:

    The node is simply removed without affecting other nodes. -> Option C
  4. Quick Check:

    Leaf node deletion = simple removal [OK]
Hint: Leaf nodes delete by direct removal only [OK]
Common Mistakes:
  • Thinking children need rearrangement
  • Assuming root always changes
  • Believing tree rebuild is needed
2. Which of the following is the correct Python function signature to delete a node with a given key from a BST?
easy
A. def deleteNode(key):
B. def deleteNode(root, key):
C. def deleteNode(root):
D. def deleteNode(key, root):

Solution

  1. Step 1: Identify required parameters

    To delete a node, we need the BST root and the key to delete.
  2. Step 2: Check function signature

    Only def deleteNode(root, key): has both parameters in correct order.
  3. Final Answer:

    def deleteNode(root, key): -> Option B
  4. Quick Check:

    Function needs root and key [OK]
Hint: Delete needs root and key parameters [OK]
Common Mistakes:
  • Swapping parameter order
  • Missing one parameter
  • Using only key or root alone
3. Given the BST below, what is the inorder traversal after deleting node 10?
       15
      /  \
    10    20
   /  \     \
  8   12    25
medium
A. [8, 12, 15, 20]
B. [8, 10, 12, 15, 20, 25]
C. [8, 15, 20, 25]
D. [8, 12, 15, 20, 25]

Solution

  1. Step 1: Delete node 10 with two children

    Node 10 has two children (8 and 12). Replace it with its inorder successor (12).
  2. Step 2: Adjust tree and perform inorder traversal

    After replacement, node 12 replaces 10, and 12's original position is removed. Inorder traversal is [8, 12, 15, 20, 25].
  3. Final Answer:

    [8, 12, 15, 20, 25] -> Option D
  4. Quick Check:

    Inorder after delete = [8, 12, 15, 20, 25] [OK]
Hint: Replace deleted node with inorder successor [OK]
Common Mistakes:
  • Not replacing node with successor
  • Leaving deleted node in traversal
  • Incorrect traversal order
4. The following code attempts to delete a node from a BST but causes an error. What is the main issue?
def deleteNode(root, key):
    if not root:
        return root
    if key < root.val:
        deleteNode(root.left, key)
    elif key > root.val:
        deleteNode(root.right, key)
    else:
        if not root.left:
            return root.right
        elif not root.right:
            return root.left
        temp = findMin(root.right)
        root.val = temp.val
        deleteNode(root.right, temp.val)
    return root
medium
A. Recursive calls do not update root's children pointers.
B. The base case is missing.
C. The function does not handle leaf nodes.
D. The function uses an undefined findMin function.

Solution

  1. Step 1: Check recursive calls for updating children

    Recursive calls like deleteNode(root.left, key) do not assign the result back to root.left, so changes are lost.
  2. Step 2: Correct by assigning returned subtree

    We must write root.left = deleteNode(root.left, key) and root.right = deleteNode(root.right, key) to update pointers properly.
  3. Final Answer:

    Recursive calls do not update root's children pointers. -> Option A
  4. Quick Check:

    Update children with recursive call results [OK]
Hint: Assign recursive call results to children [OK]
Common Mistakes:
  • Ignoring returned subtree after recursion
  • Assuming in-place changes without assignment
  • Missing base case (not the main issue here)
5. You want to delete a node with two children in a BST. Which approach correctly maintains BST properties after deletion?
hard
A. Replace the node with its inorder predecessor or successor, then delete that node.
B. Replace the node with its left child only.
C. Replace the node with its right child only.
D. Remove the node and leave a gap in the tree.

Solution

  1. Step 1: Understand deletion of node with two children

    Direct removal breaks BST rules; we must replace the node with a suitable value.
  2. Step 2: Use inorder predecessor or successor

    Replacing with inorder predecessor (max in left subtree) or successor (min in right subtree) keeps BST order intact.
  3. Step 3: Delete the replaced node recursively

    After replacement, delete the predecessor/successor node which will have at most one child.
  4. Final Answer:

    Replace the node with its inorder predecessor or successor, then delete that node. -> Option A
  5. Quick Check:

    Use inorder predecessor/successor for two-child deletion [OK]
Hint: Use inorder predecessor or successor for two-child node [OK]
Common Mistakes:
  • Replacing with only left or right child
  • Removing node without replacement
  • Breaking BST ordering rules
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