广度优先搜索
在树(图/状态集)中寻找特点节点
- 队列
树不存在环,不需要判断的是否重复,但是图会有环的情况,需要判断是否重复。
class BFS {
constructor(graph, start, end) {
this.queue = [];
this.visited = new Set();
this.queue.push(start);
this.visited.add(start);
while (this.queue.length > 0) {
node = this.queue.pop();
this.visited.add(node);
// 处理node
// 获取node子节点且为访问过
nodes = generate_related_nodes(node);
this.queue.push(nodes);
}
}
}
深度优先搜索
- 栈 (通过递归使用栈结构)
// 递归写法
const visited = new Set();
const dfs = (node, visited) => {
visited.add(node);
// process current node here
for (nextNode in node.children) {
if (!visited.has(nextNode)) {
dfs(nextNode, visited);
}
}
};