深度遍历与宽度遍历
与树结构一样,深度遍历使用栈来暂存节点;宽度遍历使用队列来暂存节点。
BFS
假设输入的结构为二维数据,根据 图算法 中的表示结构,可以求得一个图结构。
利用该图结构可以进行宽度遍历。这里宽度遍历的输入是头节点。代码实现如下
function BFS (node: NodeEl): Array<number> {
if (node === null) {
return null;
}
let queue = [];
let m = new Map();
queue.push(node);
m.set(node, node);
while( queue.length > 0) {
let n: NodeEl = queue.shift();
console.log(n.value);
let item: NodeEl;
for(item of n.nexts) {
if (!m.get(item)) {
queue.push(item);
m.set(node, node);
}
}
}
}
DFS
前提条件如上,深度遍历的代码实现如下
function DFS(node): Array<number> {
if (node === null) {
return null;
}
let stack = [];
let map = new Map();
stack.push(node);
map.set(node, node);
while (stack.length > 0) {
let n = stack.pop();
console.log(n.value);
let item: NodeEl;
for(item of n.nexts) {
if (!map.get(item)) {
stack.push(item);
map.set(node, node);
}
}
}
}