1. 深度优先遍历(DFS, Depth-First-Search)是从树的根节点开始,按照左子树、当前节点、右子树顺序对节点进行遍历(先序遍历)。一条道走到黑,只要有子节点就先遍历子节点,没有子节点再找父节点的其他子节点。
// DFS
function depthFirstSearch(node, nodeList = []) {
if (node) {
nodeList.push(node)
}
if (node.children) {
let child = node.children
for (let i = 0, len = child.length; i < len; i ++) {
depthFirstSearch(child[i])
}
}
return nodeList
}
2. 广度优先遍历(BFS, Breadth-First-Search)是从树的根节点开始,一层一层对节点进行遍历。一层层剥洋葱,有兄弟节点就先遍历兄弟节点,没有兄弟节点再找子节点。
// BFS
function breadthFirstSearch(node, nodeList = []) {
if (node) {
let stack = [node]
while (stack.length > 0) {
let item = stack.shift()
nodeList.push(item)
if (item.children) {
let child = item.children
for (let i = 0, len = child.length; i < len; i ++) {
stack.push(child[i])
}
}
}
}
return nodeList
}