算法之图的深度遍历与宽度遍历

333 阅读1分钟

深度遍历与宽度遍历

与树结构一样,深度遍历使用栈来暂存节点;宽度遍历使用队列来暂存节点。

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);
			}
		}
	}
}