【问题标题】:Tree traversing optimisation树遍历优化
【发布时间】:2017-01-14 06:09:20
【问题描述】:

我在 JavaScript 中有一个简单的树形数据结构,使用嵌套对象,例如,

class Node {
    name: "",
    children: [
       ...Node
    ]
}

rootNode=[Node, Node, Node...]

现在,

我遍历树并找到所有与谓词匹配的节点,

 let result =[];
 let allNodes =[];
 if isArray(rootNode) {
     rootNode.each(x=>{
         allNodes.push(x)
     });
 } else {
     allNodes.push(rootNode);
 }

while (allNodes.length) {
    let currentNode = allNodes.shift();
    if (predicate(currentNode) {
          result.push(currentNode);
    }
    if (currentNode.children.length) {

         allNodes.push(addAllChild(currentNode.children))
     }

 }

上面有什么有效的方法吗?

【问题讨论】:

标签: javascript data-structures tree binary-search-tree tree-traversal


【解决方案1】:

您可以尝试递归执行,因为您不需要按特定顺序执行此操作。在这里,您没有将所有节点引用存储在 allNodes 中的开销,而且由于尾调用优化,这段代码可能会比迭代代码运行得更快:

var result = [];
function traverse(curr)  {
   if(predicate(curr)) {
      result.push(curr);
   }
   for(var i=0; i < curr.children.length; i++) {
      traverse(curr.children[i]);
   }
}
//Iterate through the array of root nodes
for(var j=0;j < allNodes.length; j++) {
   traverse(allNodes[j]);
}

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2019-01-08
    • 2012-05-01
    • 2012-07-04
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多