Ответ 1
Конечный результат ваших обходов верен, вы довольно близки. Тем не менее, вы немного в деталях.
В первом поиске глубины вы попадёте в node, пометьте его как посетив и уложите в него своих невидимых детей. В этой последовательности. Порядок может показаться неуместным для дерева, но если у вас есть график с циклами, вы можете упасть в бесконечный цикл, но это еще одно обсуждение.
Учитывая базовый алгоритм, после того, как вы введете корень node в стек, вы начнете свою первую итерацию, сразу же попадёв A. Он не останется в стеке до конца алгоритма. Вы сразу же поместите A, стек D, C и B (или B, C и D, вы можете сделать это слева направо или налево, это ваш выбор) и пометить A как посещенный. Прямо сейчас, ваш стек имеет D внизу, C посередине и B сверху.
Следующий node выскочил B. Вы нажмете F и E в стек (я сохраню порядок такой же, как ваш), помечая B как посещенный. Стек имеет сверху вниз E F C D. Затем появляется E, новые узлы не добавляются, а E отмечен как посещенный. Цикл будет продолжаться, делая то же самое с F, C и D. Окончательный порядок - A B E F C D.
Я попытаюсь переписать алгоритм так же, как ваш:
Push root into stack
Loop until stack is empty
Pop node N on top of stack
Mark N as visited
For each children M of N
If M has not been visited (M.visited() == false)
Push M on top of stack
Я не буду вдаваться в подробности первого поиска ширины, алгоритм точно такой же. Разница заключается в структуре данных и том, как она ведет себя. Очередь - это FIFO (First In First Out), и из-за этого вы будете посещать все узлы того же уровня, прежде чем вы начнете посещать узлы на нижних уровнях.