2012-04-16 5 views
4

트리의 깊이 우선 탐색을 계산했습니다.트리의 첫 번째 탐색, 파이썬

def _dfs(tree, res): 
    if tree: 
     res += [tree.key] 
     _dfs(tree.left, res) 
     _dfs(tree.right, res) 
    return res 

나는 퍼스트 퍼스트 서치에 대한 해결책을 찾지 못하는 것 같습니다. 대기열이나 스택을 사용해야합니까?

감사합니다.

답변

3

예, 확인했지만 아직 재귀 적으로 처리하지 않은 노드를 보유하려면 대기열을 사용해야합니다.

큐에서 루트 노드로 시작한 다음 [노드를 하나씩 팝하고 각 하위 노드에 대해 필요한 동작 (예 : res += [tree.key])을 수행하고 큐에 밀어 넣기]를 반복합니다.

+0

스택에 저장할 때 깊이를 먼저 트래핑하는 동안 저장합니까? – isal

+0

대기열에 대기열이 없습니다. 나는 대답을 수정/확장했습니다. –

+0

알았습니다! 감사! – isal

6

너와 함께 할 수있다. 이것은 Magnus Lie Hetland의 bfs (FIFO 대기열 사용)의 고전적인 구현입니다.

from collections import deque 

def bfs(G, s): 
    P, Q = {s: None}, deque([s]) 
    while Q: 
     u = Q.popleft() 
     for v in G[u]: 
      if v in P: continue 
      P[v] = u 
      Q.append(v) 
    return P 
관련 문제