My Facebook interview question. Feb of 2015
Programming Interview Questions 26: Trim Binary Search Tree
O(n) complexity
void remove(TreeNode *r) {
if (!r) return;
remove(r->left);
remove(r->right);
delete r;
}
TreeNode *trim(TreeNode *r, int min, int max) {
if (!r) return r;
TreeNode *le = NULL, *ri = NULL;
if (r->val < min) {
remove(r->left);
} else {
le = trim(r->left, min, max);
}
if (r->val > max) {
remove(r->right);
} else {
ri = trim(r->right, min, max);
}
if (r->val >= min && r->val <= max) {
r->left = le;
r->right = ri;
} else {
delete r;
r = le? le:ri;
}
return ri;
}
TODO