일부 알고리즘을 사용하여 놀고 있었는데 예상치 못한 결과가 나타났습니다. 여기에 내 코드 :재귀 함수는 결과에 중복을 생성합니다.
이traverse = (tree, stack) ->
stack.push tree.node
if not tree.branches
stack
else
traverse branch, stack for branch in tree.branches
one = { node: 1 }
two = { node: 2 }
tree = { node: "+", branches: [one, two] }
console.log traverse one, [] # => [ 1 ]
console.log traverse two, [] # => [ 2 ]
console.log traverse tree, [] # => [ [ '+', 1, 2 ], [ '+', 1, 2 ] ]
내가 tree
을 통과하는 동안 얻을 것으로 예상 출력은 [ '+', 1, 2 ]
하지만이 중복됩니다. 나는 여기서 간단한 것을 놓치니?
감사합니다.
아! 당신은 정말로 옳습니다. for 루프는 배열 (바깥 쪽 [])을 반환하고 스택은 변경 가능합니다. 따라서 처음으로 스택을 반환해도 [+ 1], 두 번째 값은 [+ 1 2]로 변경됩니다. 감사. – j1n3l0