루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
루트가 1번 노드이니 1번 노드를 시작으로 탐색하면서 현재 노드의 값을 다음 노드에 전달 해주면 되는 문제이다.
DFS, BFS 둘 다 가능하다.
import sys
input = sys.stdin.readline
def dfs(start, parent):
# 방문처리함과 동시에 부모노드 번호를 전달받음
# 양수가 들어가면 방문처리가능
visit_parent[start] = parent
for next in graph[start]:
if not visit_parent[next]:
# 현재 노드의 번호를 다음 노드에게 전해줌
dfs(next, start)
n = int(input())
graph = [[] for _ in range(n + 1)]
visit_parent = [0] * (n + 1)
for _ in range(n - 1):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
dfs(1, 1
# 1번 노드를 제외한 2번 노드부터 순서대로 부모 출력
print(*visit_parent[2:], sep = '\n')
import sys
from collections import deque
input = sys.stdin.readline
def bfs(start, parent):
q = deque()
visit_parent[start] = parent
q.append(start)
while q:
now = q.popleft()
for next in graph[now]:
if not visit_parent[next]:
# 다음 노드의 방문처리를 현재 노드의 번호로 한다
visit_parent[next] = now
q.append(next)
n = int(input())
graph = [[] for _ in range(n + 1)]
visit_parent = [0] * (n + 1)
for _ in range(n - 1):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
bfs(1, 1)
print(*visit_parent[2:], sep = '\n')