DFS普通递归实现
<html> <head> <!-- <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> --> <style> </style> </head> <div id="onMouseover"></div> <body> <script> const tree = [{ name: 'root', children: [ { name: 'c1', children: [ { name: 'c11', children: [] }, { name: 'c12', children: [] } ] }, { name: 'c2', children: [ { name: 'c21', children: [] }, { name: 'c22', children: [] } ] } ] }] // 深度优先的方式遍历 打印 name // ['root', 'c1','c11', 'c12', 'c2', 'c21', 'c22'] let arr = [] function DFS(item) { let getLength = item.length if (getLength < 1 && !item.name) { return arr } for (let i = 0; i < getLength; i++) { arr.push(item[i].name) if (item[i].children.length > 0) { DFS(item[i].children) } } return arr } console.log(DFS(tree)) </script> </body> </html>
<html> <head> <!-- <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> --> <style> </style> </head> <div id='root'> <span>123 <a href="#"> sdsd </a> <div>sdsd<a>这是一个a标签</a></div> </span> <span>456 <p>这是一个p标签</p> </span> </div> <body> <script> // 深度优先算法 DFS,递归实现 function deepTraversal(node, nodeList) { if (node) { nodeList.push(node); var children = node.children; for (var i = 0; i < children.length; i++) //每次递归的时候将 需要遍历的节点 和 节点所存储的数组传下去 deepTraversal(children[i], nodeList); } return nodeList; } var root = document.getElementById('root') console.log(deepTraversal(root, nodeList = [])) // 深度优先算法 DFS function deepTraversal(node) { var nodeList = []; if (node) { var stack = []; stack.push(node); while (stack.length != 0) { var childrenItem = stack.pop(); nodeList.push(childrenItem); var childrenList = childrenItem.children; for (var i = childrenList.length - 1; i >= 0; i--) stack.push(childrenList[i]); } } return nodeList; } var root = document.getElementById('root') console.log(deepTraversal(root)) // 广度优先算法 BFS function wideTraversal(node) { var nodes = []; if (node != null) { var queue = []; queue.unshift(node); while (queue.length != 0) { var item = queue.shift(); nodes.push(item); var children = item.children; for (var i = 0; i < children.length; i++) queue.push(children[i]); } } return nodes; } var root = document.getElementById('root'); console.log(wideTraversal(root)); </script> </body> </html>