Bird
Raised Fist0
DSA C++programming~10 mins

BST Delete Operation in DSA C++ - Execution Trace

Choose your learning style10 modes available
Concept Flow - BST Delete Operation
Start at root
↓
Find node to delete
↓
Node found?
No→Stop: Node not found
Yes↓
Check children count
↓
Delete
↓
Replace node data
↓
Delete inorder successor
↓
Done
The delete operation in a BST first finds the node, then deletes it based on its children count: no child, one child, or two children with inorder successor replacement.
Execution Sample
DSA C++
DeleteNode(root, 20);

// Deletes node with value 20 from BST
This code deletes the node with value 20 from the BST, adjusting pointers to maintain BST properties.
Execution Table
StepOperationNode VisitedPointer ChangesVisual State
1Start at root50None┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ data:50│ │ data:30│ │ data:70│ │ data:20│ │ data:40│ │ nextL:─┼──→ │ nextL:─┼──→ │ nextL:∅ │ │ nextL:∅ │ │ nextL:∅ │ │ nextR:─┼──→ │ nextR:─┼──→ │ nextR:─┼──→ │ nextR:∅ │ │ nextR:∅ │ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ head
2Traverse left (20 < 50)30NoneSame as step 1
3Traverse left (20 < 30)20NoneSame as step 1
4Node found (20)20NoneSame as step 1
5Check children count (0 children)20NoneSame as step 1
6Delete node 20 (leaf)20Parent(30).nextL = null┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ data:50│ │ data:30│ │ data:70│ │ data:40│ │ nextL:─┼──→ │ nextL:∅ │ │ nextL:∅ │ │ nextL:∅ │ │ nextR:─┼──→ │ nextR:─┼──→ │ nextR:∅ │ │ nextR:∅ │ └────────┘ └────────┘ └────────┘ └────────┘ head
7DonenullNoneFinal tree without node 20
💡 Node 20 deleted as leaf node, parent pointer updated to null
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 6Final
current503020nullnull
parentnull50303030
root5050505050
Key Moments - 3 Insights
Why do we update parent.nextL to null when deleting node 20?
Because node 20 is a leaf with no children, we remove it by setting its parent's left pointer to null, as shown in step 6 of the execution_table.
What if the node to delete had one child?
We would replace the node with its single child by updating the parent's pointer to skip the node, similar to step 6 but pointing to the child instead of null.
Why do we traverse left when 20 < 50 and then 20 < 30?
Because in BST, smaller values go to the left subtree. The traversal steps 2 and 3 show moving left to find the node 20.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the 'current' node at step 3?
A50
B30
C20
Dnull
💡 Hint
Check the 'Node Visited' column at step 3 in execution_table
At which step does the parent's pointer get updated to remove the node?
AStep 4
BStep 5
CStep 6
DStep 7
💡 Hint
Look at 'Pointer Changes' column for when parent.nextL changes in execution_table
If node 20 had a right child, how would the pointer change in step 6?
Aparent.nextL = null
Bparent.nextL = node 20's right child
Cparent.nextR = node 20's right child
DNo pointer change
💡 Hint
Refer to key_moments about one child replacement and pointer updates
Concept Snapshot
BST Delete Operation:
- Find node to delete by BST property
- If leaf: remove by setting parent's pointer to null
- If one child: replace node with child
- If two children: replace with inorder successor
- Update pointers carefully to maintain BST
- Traversal follows left/right based on value
Full Transcript
The BST delete operation starts at the root and traverses left or right to find the node to delete. Once found, it checks the number of children. If the node is a leaf (no children), it is simply removed by setting the parent's pointer to null. If the node has one child, the parent's pointer is updated to point to that child, effectively removing the node. If the node has two children, the inorder successor is found, its value replaces the node's value, and then the successor node is deleted. This process maintains the BST properties. The execution table shows step-by-step traversal and pointer updates, especially how the parent's next pointer changes when deleting a leaf node. The variable tracker follows the current node and parent pointers during traversal and deletion.

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 is replaced by its right child.
B. The entire tree is restructured to maintain BST properties.
C. The node is simply removed and its parent's pointer is set to null.
D. The node is replaced by its left child.

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: Update parent's pointer

    The parent's pointer to this node is set to null, effectively removing the node.
  3. Final Answer:

    The node is simply removed and its parent's pointer is set to null. -> Option C
  4. Quick Check:

    Leaf node deletion = remove node and nullify parent's pointer [OK]
Hint: Leaf node deletion just removes the node, no restructuring needed [OK]
Common Mistakes:
  • Thinking the tree needs full restructuring
  • Replacing leaf node with children when none exist
  • Confusing leaf node deletion with internal node deletion
2. Which of the following is the correct syntax to delete a node with value key from a BST using a recursive function named deleteNode in C++?
easy
A. root.deleteNode(key);
B. deleteNode(root, key);
C. deleteNode(key, root);
D. root = deleteNode(root, key);

Solution

  1. Step 1: Understand function signature

    The function returns the new root after deletion, so assignment is needed.
  2. Step 2: Correct function call

    Calling root = deleteNode(root, key); updates the root pointer correctly.
  3. Final Answer:

    root = deleteNode(root, key); -> Option D
  4. Quick Check:

    Assign returned root after deletion [OK]
Hint: Always assign root = deleteNode(root, key) to update tree [OK]
Common Mistakes:
  • Not assigning the returned root to update the tree
  • Swapping argument order incorrectly
  • Using method call syntax on root pointer
3. Consider the BST below and the code snippet that deletes the node with value 10:
    15
   /  \
  10  20
 /    / \
8    17 25
root = deleteNode(root, 10); What will be the in-order traversal of the BST after deletion?
medium
A. [8, 15, 10, 17, 20, 25]
B. [8, 15, 17, 20, 25]
C. [8, 15, 17, 20]
D. [8, 10, 15, 17, 20, 25]

Solution

  1. Step 1: Identify node to delete and its children

    Node 10 has one child (8). Deleting 10 replaces it with 8.
  2. Step 2: Perform in-order traversal after deletion

    In-order traversal visits nodes in ascending order: 8, 15, 17, 20, 25.
  3. Final Answer:

    [8, 15, 17, 20, 25] -> Option B
  4. Quick Check:

    In-order after deleting 10 = [8, 15, 17, 20, 25] [OK]
Hint: Replace deleted node with child or successor, then traverse in-order [OK]
Common Mistakes:
  • Forgetting to replace node 10 with its child 8
  • Including deleted node 10 in traversal
  • Misordering nodes in traversal
4. The following C++ code attempts to delete a node from a BST but has a bug. What is the bug?
Node* deleteNode(Node* root, int key) {
  if (!root) return root;
  if (key < root->val) root->left = deleteNode(root->left, key);
  else if (key > root->val) root->right = deleteNode(root->right, key);
  else {
    if (!root->left) return root->right;
    else if (!root->right) return root->left;
    Node* temp = root->left; // BUG HERE
    root->val = temp->val;
    root->left = deleteNode(root->left, temp->val);
  }
  return root;
}
medium
A. It uses the left child instead of the inorder successor (right subtree minimum) for replacement.
B. It does not handle the case when root is null.
C. It deletes the wrong key by comparing incorrectly.
D. It does not update the root pointer after deletion.

Solution

  1. Step 1: Identify replacement node for deletion

    For nodes with two children, the inorder successor (minimum in right subtree) should replace the node.
  2. Step 2: Spot incorrect replacement

    The code incorrectly uses the left child as replacement, which breaks BST properties.
  3. Final Answer:

    It uses the left child instead of the inorder successor (right subtree minimum) for replacement. -> Option A
  4. Quick Check:

    Use inorder successor (right subtree min) for two-child deletion [OK]
Hint: Replace with inorder successor (min right subtree), not left child [OK]
Common Mistakes:
  • Using left child instead of inorder successor
  • Not updating pointers after replacement
  • Ignoring null root check
5. You have a BST with nodes: 30, 20, 40, 10, 25, 35, 50. You delete node 30 (root). Which node replaces the root to maintain BST properties?
hard
A. Node 35 (minimum node in right subtree)
B. Node 25 (maximum node in left subtree)
C. Node 40 (right child of root)
D. Node 20 (left child of root)

Solution

  1. Step 1: Identify node to delete and its children

    Node 30 is root with two children: left subtree (20) and right subtree (40).
  2. Step 2: Find inorder successor to replace root

    Inorder successor is the minimum node in right subtree, which is 35.
  3. Step 3: Replace root with inorder successor

    Node 35 replaces 30 to maintain BST properties after deletion.
  4. Final Answer:

    Node 35 (minimum node in right subtree) -> Option A
  5. Quick Check:

    Root replacement = inorder successor (min right subtree) [OK]
Hint: Replace deleted root with inorder successor (min right subtree) [OK]
Common Mistakes:
  • Replacing with left subtree max instead of right subtree min
  • Replacing with direct child without checking subtree
  • Confusing inorder predecessor and successor
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