1、广度优先遍历
英文缩写为BFS即Breadth FirstSearch.其过程检验来说是对每一层节点依次访问,访问完一层进入下一层,而且每个节点只能访问一次。
2、深度优先遍历
英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
// 深度优先--递归
function deepTraversal1(node, nodes = []) {
if (node) {
nodes.push(node)
const children = node.children
for (let i = 0; i < children.length; i++) {
deepTraversal1(children[i], nodes)
}
}
return nodes
}
// 深度优先--非递归
function deepTraversal2(node) {
const nodes = []
const stack = []
if (node) {
stack.push(node)
while(stack.length) {
const item = stack.pop()
const children = item.children
nodes.push(item)
for (let i = children.length - 1; i >=0 ; i--) {
stack.push(children[i])
}
}
}
return nodes
}
// 广度优先
function breadthTraversal(node) {
const nodes = []
const queue = []
if (node) {
queue.push(node)
while(queue.length) {
const item = queue.shift()
const children = item.children
nodes.push(item)
for (let i = 0; i < children.length; i++) {
queue.push(children[i])
}
}
}
return nodes
}