Я не думаю, что есть имя для этого. Как вы уже определили, он не ограничивается двоичными деревьями (в отличие от «по порядку») и может использоваться для n-арных деревьев.
Как и в другом ответе, я приведу здесь рекурсивную реализацию, но используя один стек:
- Поместите данный узел в стек
- Если у узла есть дочерние элементы, то примените эту процедуру рекурсивно для каждого из них
- Если у узла нет дочерних элементов, то pop и посещают все узлы из стека.
Ниже приведена реализация JavaScript этого алгоритма, которая будет работать на следующем графике:
a
/ \
r e
/ | \ / | \
G h N d i t
| / \ |
p o L s
Предполагаемый обход будет перечислять узлы в следующем порядке: "GraphNodeList"
function traverse(adjacency, id, visit, stack=[]) {
stack.push(id);
if (adjacency[id]) {
for (let child of adjacency[id]) traverse(adjacency, child, visit, stack);
} else {
while (stack.length) visit(stack.pop());
}
}
// Example run
let adjacency = { a: 're', r: 'GhN', h: 'p', e: 'dit', d: 'oL', t: 's' };
traverse(adjacency, 'a', console.log); // log each visited node to console.