What if you could remove any item from a sorted list instantly without breaking its order?
Why BST Delete Operation in DSA Typescript?
Imagine you have a big phone book sorted by names. You want to remove a contact, but you have to rewrite the whole book by hand to keep it sorted.
Manually removing an entry and keeping the list sorted is slow and easy to mess up. You might lose contacts or break the order, making it hard to find names later.
The BST Delete Operation lets you remove a value from a sorted tree quickly and safely. It rearranges the tree so everything stays in order without rewriting everything.
let contacts = ['Alice', 'Bob', 'Charlie', 'David']; // To delete 'Bob', remove and reorder manually contacts = contacts.filter(name => name !== 'Bob'); contacts.sort();
class Node { value: string; left: Node | null; right: Node | null; constructor(value: string) { this.value = value; this.left = null; this.right = null; } } // Assuming bst is an instance of a BST class with a delete method // Delete 'Bob' using BST delete method bst.delete('Bob');
You can quickly update large sorted data sets without losing order or wasting time.
Deleting a contact from your phone's contact list instantly, while keeping the list sorted for fast searching.
Manual deletion in sorted data is slow and error-prone.
BST Delete Operation removes nodes while keeping order intact.
This makes managing large sorted data efficient and reliable.
Practice
Solution
Step 1: Understand leaf node deletion
A leaf node has no children, so deleting it means just removing it from the tree.Step 2: Effect on the BST
Since it has no children, no other nodes need to be moved or replaced.Final Answer:
The node is simply removed without affecting other nodes -> Option DQuick Check:
Leaf node deletion = simple removal [OK]
- Thinking children need rearrangement
- Replacing leaf with child nodes
- Rebuilding the whole tree
Solution
Step 1: Analyze parameter types
The root should be a TreeNode or null, and key should be a number to identify the node.Step 2: Analyze return type
The function returns the updated root node or null if tree becomes empty.Final Answer:
function deleteNode(root: TreeNode | null, key: number): TreeNode | null -> Option CQuick Check:
Correct parameter and return types = function deleteNode(root: TreeNode | null, key: number): TreeNode | null [OK]
- Swapping parameter types
- Using wrong return type
- Using string instead of number for key
deleteNode(root, 10), what is the in-order traversal of the BST after deletion?BST structure:
15
/ \
10 20
/ \ \
8 12 25
Solution
Step 1: Delete node 10 with two children
Node 10 has two children (8 and 12). Replace it with its inorder successor, which is 12.Step 2: Remove node 12 from its original position
After replacement, remove node 12 from right subtree of 10.Step 3: In-order traversal after deletion
Traversal is [8, 12, 15, 20, 25].Final Answer:
[8, 12, 15, 20, 25] -> Option AQuick Check:
Inorder after deleting 10 = [8, 12, 15, 20, 25] [OK]
- Not replacing node 10 correctly
- Leaving node 10 in tree
- Incorrect traversal order
function deleteNode(root: TreeNode | null, key: number): TreeNode | null {
if (!root) return null;
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;
if (!root.right) return root.left;
let minNode = findMin(root.right);
root.val = minNode.val;
deleteNode(root.right, minNode.val);
}
return root;
}Solution
Step 1: Analyze deletion of minNode
After copying minNode's value, the code calls deleteNode on root.right but does not assign the result back to root.right.Step 2: Effect of missing assignment
Without assignment, the minNode is not removed from the right subtree, causing duplicate values.Final Answer:
Missing assignment of root.right after deleting minNode -> Option BQuick Check:
Assign updated subtree after deletion [OK]
- Forgetting to assign after recursive delete
- Misplacing base case
- Using wrong comparison signs
Solution
Step 1: Identify node 30's children
Node 30 has two children: left subtree with 20 and right subtree with 40.Step 2: Find inorder successor of 30
Inorder successor is the smallest node in right subtree, which is 35.Step 3: Replace 30 with 35 and delete 35 from right subtree
35 replaces 30 as root, and 35 is removed from its original position.Final Answer:
35 -> Option AQuick Check:
Inorder successor replaces deleted node [OK]
- Using inorder predecessor instead
- Choosing wrong replacement node
- Not updating root after deletion
Ready to prove it?
Pass the test and this pattern moves unknown
