Задача A
Я предполагаю, что два дерева сбалансированы.
void deleteTree(node* A, node* B)
{
if(A == NULL || B == NULL)
return;
if(A->data == B->data)
{
deleteTree(A->left, B->left);
deleteTree(A->right, B->right);
removeNode(A); // Normal BST remove
}
else if(A->data > B->data)
{
Node* right = B->right;
B->right = NULL;
deleteTree(A->left, B);
deleteTree(A, right);
}
else // (A->data < B->data)
{
Node* left = B->left;
B->left = NULL;
deleteTree(A->right, B);
deleteTree(A, left);
}
}
Сложность времени:
T(N) = 2 * T(N / 2) + O(1)
Таким образом, общая сложность равна O (N) согласно основной теореме.Сложность пространства составляет O (1) .Одним из недостатков является то, что я уничтожил B.
PS: У меня нет реализации BST, поэтому я не могу протестировать код для вас.Но я думаю, что идея верна.
Задача B
Использовать хеш-таблицу для одного дерева и обходить другое.Вы получите O (N) за сложность времени и пространства.