2

내가 좋아하는 중첩 된 개체를 사용하여 자바 스크립트에서 간단한 트리 데이터 구조를 통과하는트리</p> <pre><code>class Node { name: "", children: [ ...Node ] } rootNode=[Node, Node, Node...] </code></pre> 이제 <p>,</p> <p>내가 좋아하는 조건을 일치하는 모든 노드를 트리를 탐색하고 발견, 최적화

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)) 
    } 

} 

효과적인 방법이 있습니까?

답변

0

특정 순서로 수행 할 필요가 없으므로 재귀 적으로 시도 할 수 있습니다. 여기서는 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]); 
}