用 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 宽度优先搜索的简写
- 此处算法使用队列实现(先进先出),每发现节点有子节点,则将子节点添加到队列尾部