뒤돌아서면 까먹고, 뒤돌아서면 까먹는 BFS 기본 코드
코테 인강 선생님이 30초만에 짜야된다고 외우라고 3천번 정도 말씀하셨다.
BFS는 그래프나 트리에서 가장 가까운 노드부터 차례로 탐색하는 알고리즘이다.즉, 한 단계(level)의 모든 노드를 탐색한 후 다음 단계로 넘어가는 방식으로 진행된다.
from collections import deque
def levelOrder(root):
visited = []
if root is None:
return 0
q = deque()
q.append(root)
while q:
cur_node = q.popleft()
visited.append(cur_node.value)
if cur_node.left:
q.append(cur_node.left)
if cur_node.right:
q.append(cur_node.right)
return visited
그래프 탐색 BFS로, 인접 리스트 방식으로 연결된 모든 정점을 탐색
from collections import deque
def bfs(graph, start):
q = deque([start]) # 큐 생성 및 시작 노드 삽입
visited = set([start]) # 방문한 노드 저장
while q:
cur_node = q.popleft() # 큐에서 노드 꺼내기
print(cur_node, end=" ") # 방문한 노드 출력
for next_node in graph[cur_node]: # 연결된 노드 탐색
if next_node not in visited: # 아직 방문하지 않았다면
q.append(next_node) # 큐에 추가
visited.add(next_node) # 방문 표시
deque
를 활용하여 큐(queue) 자료구조를 사용while
루프를 통해 큐에서 요소를 하나씩 꺼내며 탐색을 진행TreeNode
) 를 사용하여 왼쪽(left
)과 오른쪽(right
) 자식을 탐색graph
) 를 사용하여 현재 노드와 연결된 모든 이웃을 탐색visited
리스트를 이용하여 탐색한 노드의 값을 저장visited
딕셔너리를 이용하여 방문한 노드 자체를 체크root
가 None
일 경우 0
을 반환하여 탐색을 종료start_v
를 visited
에 추가하면서 탐색을 시작