用 js 描述树
let tree = [
{
label:'a',
children:[
{
label:'b',
children:[
{
label:'d'
},
{
label:'e'
}
]
},
{
label:'c',
children:[
{
label:'f'
}
]
}
]
}
]
- 使用数组是因为树的节点有顺序
深度优先遍历
从根节点出发,优先遍历最深的节点
遍历顺序为 abdecf
function DFS(tree) {
tree.forEach((node) => {
console.log(node.label);
node.children && DFS(node.children);
});
}
- DFS 是 Depth-First-Search 深度优先搜索的简写
广度优先遍历
从根节点出发,从上往下对每一层从左到右依次访问
遍历顺序为 abcdef
function BFS(tree) {
let queue = tree;
for (let i = 0; i < queue.length; i++) {
console.log(queue[i].label);
if (queue[i].children) {
queue = queue.concat(queue[i].children);
}
}
}
- BFS 是 Breadth First Search 宽度优先搜索的简写
- 此处算法使用队列实现(先进先出),每发现节点有子节点,则将子节点添加到队列尾部