概念
- 深度优先遍历:从某个顶点出发,首先访问这个顶点,然后找出刚访问这个节点的第一个未被访问的邻接点,然后再以此邻接点作为顶点,继续寻找下一个顶点进行访问。重复步骤,直到所有的节点都被访问完为止。
- 广度优先遍历:从某个顶点出发,首先访问这个顶点,然后找到刚访问这个顶点的所有未被访问的邻接点,访问完后再访问这些节点中的第一个邻接点的所有节点,重复步骤,直到所有的节点都被访问完为止。
深度优先遍历
```javascript // 测试的树 const node = { name: ‘A’, children: [{
}, {name: 'B',children: [{name: 'C'}, {name: 'D'}]}, {name: 'E',children: [{name: 'F'}, {name: 'G'}]
}, {name: 'L'
}] }name: 'M'
// 深度优先遍历的递归写法 const nodeList = [] function deepTraversal(node) { if (node) { nodeList.push(node.name) let children = node.children ? node.children : [] for (let i = 0;i < children.length; i++) { deepTraversal(children[i]) } } return nodeList.join(‘,’) } console.log(deepTraversal(node))
// 深度优先遍历的非递归写法 function deepTraversal(node) { let nodes = [] if (node) { let stack = [] // 同时存放将来要访问的节点 stack.push(node) while(stack.length) { let item = stack.pop() // 正在访问的节点 nodes.push(item.name) let children = item.children ? item.children : [] for (let i = children.length - 1; i>=0; i—) { // 将现在访问的节点的子节点存入 stack,供将来访问 stack.push(children[i]) } } } return nodes.join(‘,’) } console.log(deepTraversal(node)) ```
https://juejin.cn/post/6882627409393221646
