class DFS { traverse(node, getAdjacent) { let traverseOrder = [], stack = [], missing = [], visited = new Set(); stack.push(node); while (stack.length > 0) { node = stack.pop(); if (!visited.has(node)) { traverseOrder.push(node); visited.add(node); let { graphAdj, missingNodes } = getAdjacent(node); missing.push(...missingNodes); for (let j = 0; j < graphAdj.length; j++) { stack.push(graphAdj[j]); } } } return { traverseOrder, missing }; } } module.exports = { DFS };