JavaScript中树的深度优先遍历和广度优先遍历

1、深度优先遍历的递归写法 function deepTraversal(node) {var nodes = [];if (node != null) {          nodes.push(node);          var children = node.children;          for (var i =...

1、深度优先遍历的递归写法

function deepTraversal(node) {
var nodes = [];
if (node != null) {  
        nodes.push(node);  
        var children = node.children;  
        for (var i = 0; i < children.length; i++)  
           deepTraversal(children[i]);  
    }  
return nodes;
}



2、深度优先遍历的非递归写法


function deepTraversal(node) {
var nodes = [];
if (node != null) {
var stack = [];
stack.push(node);
while (stack.length != 0) {
var item = stack.pop();
nodes.push(item);
var children = item.children;
for (var i = children.length - 1; i >= 0; i--)
stack.push(children[i]);
}
}  
return nodes;
}



3、广度优先遍历的递归写法:


报错:Maximum call stack size exceeded(…)

function wideTraversal(node) {
var nodes = [];
var i = 0;
if (!(node == null)) {
nodes.push(node);
wideTraversal(node.nextElementSibling);
node = nodes[i++];
wideTraversal(node.firstElementChild);
}
return nodes;
}



4、广度优先遍历的非递归写法


function wideTraversal(selectNode) {
var nodes = [];
if (selectNode != null) {
var queue = [];
queue.unshift(selectNode);
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;
}

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
廖雪
廖雪

78 篇文章

作家榜 »

  1. admin 651 文章
  2. 粪斗 185 文章
  3. 王凯 92 文章
  4. 廖雪 78 文章
  5. 牟雪峰 12 文章
  6. 李沁雪 9 文章
  7. 全易 2 文章
  8. Stevengring 0 文章