Challenge - 5 Problems
BST Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of Inorder Traversal on a BST
What is the output of the inorder traversal of this BST after inserting the values 10, 5, 15, 3, 7, 12, 18 in that order?
DSA C++
struct Node {
int val;
Node* left;
Node* right;
Node(int x) : val(x), left(nullptr), right(nullptr) {}
};
Node* insert(Node* root, int val) {
if (!root) return new Node(val);
if (val < root->val) root->left = insert(root->left, val);
else root->right = insert(root->right, val);
return root;
}
void inorder(Node* root, std::vector<int>& res) {
if (!root) return;
inorder(root->left, res);
res.push_back(root->val);
inorder(root->right, res);
}
int main() {
Node* root = nullptr;
int values[] = {10, 5, 15, 3, 7, 12, 18};
for (int v : values) root = insert(root, v);
std::vector<int> result;
inorder(root, result);
for (int x : result) std::cout << x << " ";
return 0;
}Attempts:
2 left
💡 Hint
Inorder traversal of a BST always gives sorted values.
✗ Incorrect
Inorder traversal visits nodes in ascending order for a BST. The inserted values create a BST where inorder traversal outputs the sorted list.
🧠 Conceptual
intermediate1:30remaining
Why BST Property is Important for Search Efficiency
Why does the BST property help in efficient searching compared to an unsorted binary tree?
Attempts:
2 left
💡 Hint
Think about how comparing values guides the search direction.
✗ Incorrect
The BST property ensures left children are smaller and right children are larger, so at each node you can decide which subtree to search, effectively halving the search space.
🔧 Debug
advanced2:00remaining
Identify the Bug in BST Insertion
What error will this BST insertion code cause when inserting duplicate values?
DSA C++
Node* insert(Node* root, int val) { if (!root) return new Node(val); if (val < root->val) root->left = insert(root->left, val); else if (val > root->val) root->right = insert(root->right, val); return root; }
Attempts:
2 left
💡 Hint
Check what happens when val == root->val.
✗ Incorrect
The code does not handle the case when val equals root->val, so it returns root without inserting duplicates.
❓ Predict Output
advanced2:30remaining
Output After Deleting a Node with Two Children in BST
Given the BST constructed by inserting 20, 10, 30, 5, 15, 25, 35, what is the inorder traversal output after deleting node 20?
DSA C++
struct Node {
int val;
Node* left;
Node* right;
Node(int x) : val(x), left(nullptr), right(nullptr) {}
};
Node* insert(Node* root, int val) {
if (!root) return new Node(val);
if (val < root->val) root->left = insert(root->left, val);
else root->right = insert(root->right, val);
return root;
}
Node* findMin(Node* root) {
while (root && root->left) root = root->left;
return root;
}
Node* deleteNode(Node* root, int val) {
if (!root) return nullptr;
if (val < root->val) root->left = deleteNode(root->left, val);
else if (val > root->val) root->right = deleteNode(root->right, val);
else {
if (!root->left) {
Node* temp = root->right;
delete root;
return temp;
} else if (!root->right) {
Node* temp = root->left;
delete root;
return temp;
}
Node* temp = findMin(root->right);
root->val = temp->val;
root->right = deleteNode(root->right, temp->val);
}
return root;
}
void inorder(Node* root, std::vector<int>& res) {
if (!root) return;
inorder(root->left, res);
res.push_back(root->val);
inorder(root->right, res);
}
int main() {
Node* root = nullptr;
int values[] = {20, 10, 30, 5, 15, 25, 35};
for (int v : values) root = insert(root, v);
root = deleteNode(root, 20);
std::vector<int> result;
inorder(root, result);
for (int x : result) std::cout << x << " ";
return 0;
}Attempts:
2 left
💡 Hint
Deleting a node with two children replaces it with the smallest node in the right subtree.
✗ Incorrect
Node 20 is replaced by 25 (minimum in right subtree). Then 25 is deleted from its original position. The inorder traversal reflects this change.
🧠 Conceptual
expert1:30remaining
Effect of Violating BST Property on Search
If a binary tree does not maintain the BST property, what is the worst-case time complexity of searching for a value compared to a BST?
Attempts:
2 left
💡 Hint
Without BST property, you cannot decide which subtree to skip.
✗ Incorrect
Without the BST property, searching may require visiting every node, leading to linear time complexity.