2014-03-27 2 views
2

약간의 성가신 문제가 있습니다. 나무가있어서 재귀 적으로 트래버스하고 싶습니다. 재귀가 진행되는 동안 노드에서 현재 값만 저장되므로 현재 경로를 저장하려고합니다. 다음 코드를 사용합니다 :트리 재귀 중 경로 저장

def getPaths(tree, level, path): 
    copyPath = list(path) 
    if level > 1: 
     if not tree.children: 
      '''do some non important stuff''' 
    for child in tree.children: 
     copyPath.append(child.data.value) 
     getPaths(child,level+1, copyPath) 

처음에 나는 목록을 복사하지 않고 간단하게 시도했지만 분명히 작동하지 않았습니다. 그러나 목록을 복사 할 때라도 하나의 전역 목록을 사용하여 경로별로 다른 목록에 수집하는 대신 모든 값을 수집하는 것처럼 보입니다.

나는 (아마) 쉬운 문제에 도움을 주시면 감사하겠습니다.

+0

성능상의 이유로 같은 목록을 계속 전달할 것입니다 (다른 방식은 맘에 들지 않을 것입니다!)하지만 다른 데이터 구조를 사용하거나 다른 형식을 다르게 사용할 수 있습니다. 원하는 경우 목록의 목록 만 유지하십시오. –

답변

3

당신이 itertools으로 보면, 불변의 스타일을 수행하려는 경우와 chain 방법 :

for child in tree.children: 
    getPaths(child, level+1, chain(path, [child.data.value])) 

이제 당신은 당신이하지리스트를 복사에 의존하는 이상 반복 할 수 있다는 iterator있어 오히려 초기 "경로"와 새로운 "노드"를 나타내는 것입니다.

편집 :

그냥에서도 (tee을에 당신이 그것을 반복 한 후 다른 기능이 통과 할 수 있도록하려면, 당신은 할 수 있습니다되도록 iterator 다루고있는 기억 itertools.)

+0

빠른 답변 주셔서 감사합니다. 나를 위해 작동 :). 좋은 하루 되세요. –