У меня проблема с поворотом этого кода:Как написать итерационный DFS, который отсчитывает потомок узла в дереве
void dfs(int i = 1) {
static int preorder = 0;
d[i].first = ++preorder;
d[i].second = 1;
for (list<int>::iterator it = tree[i].begin(); it != tree[i].end(); ++it) {
dfs(*it);
d[i].second += d[*it].second;
}
}
в повторяющийся. Как вы можете видеть, он находит номер предварительного заказа каждого узла и количество его потомков. Я должен это сделать, из-за ограничения памяти (размер данных до 10^6).
Заранее спасибо.
Это не хорошее использование статической переменной ... –
Почему? Эта функция вызывается только один раз. – rAum
Вы называете это рекурсивно, поэтому на самом деле его называют много. –