Хм, у меня случается так, что простой способ, который требует только одного дополнительного узла или меньше в пространстве, состоит в том, чтобы иметь фиктивный узел, который содержит счетчик возврата. Когда вы найдете цель поиска, вы устанавливаете фиктивный узел на n и возвращаете это , а не тот узел, который вы нашли, который вам не нужен.
Вам нужна функция DUMMY(node)
, которая возвращает true только для фиктивного узла. (DUMMY()
может быть реализовано путем сравнения адреса узла или проверки наличия волшебного cookie внутри узла.)
Node *search(Node *next) {
if (found the the answer)
dummy->backtrack = n;
return dummy;
} else r = search(whatever ? n->left : n->right);
if (DUMMY(r)) {
if (dummy->backtrack == 0)
return next;
--dummy->backtrack;
}
return r;
}