Delete Code
void delete(Comparable key, Node *& root) {
Node *& handle(find(key, root));
Node * toDelete = handle;
if (handle->left == NULL) { // Leaf or one child
} else if (handle->right == NULL) { // One child
} else { // Two child case
handle->data = successor->data;
delete(successor->data, handle->right);