https://www.acmicpc.net/problem/22856
22856번: 트리 순회
노드가 $N$개인 이진 트리가 있다. 트리를 중위 순회와 유사하게 순회하려고 한다. 이를 유사 중위 순회라고 하자. 순회의 시작은 트리의 루트이고 순회의 끝은 중위 순회할 때 마지막 노드이다.
www.acmicpc.net
풀이 과정
- Tree를 먼저 중위순회 해보고 마지막에 방문하는 정점이 어디인지 파악한다.
- 전체 간선의 개수의 두배에서 마지막에 방문하는 정점을 방문하기 위해 지나온 간선의 개수를 빼주어서 출력
소스 코드
import sys
sys.setrecursionlimit(10**6)
input = lambda: sys.stdin.readline().rstrip()
left = dict()
right = dict()
N = int(input())
parent = [0] * (N+1)
node_count = 0
for _ in range(N):
a, b, c = map(int, input().split())
left[a] = b
right[a] = c
if b != -1:
parent[b] = a
node_count += 1
if c != -1:
parent[c] = a
node_count += 1
# 마지막 노드 구하는 파트
last_node = 0
def traverse(node):
global last_node
if node == -1:
return
traverse(left[node])
last_node = node
traverse(right[node])
traverse(1)
edge_count = node_count * 2
movement = 0
# 마지막 노드까지 이동 경로의 거리 구함
while last_node != 1:
movement += 1
last_node = parent[last_node]
print(edge_count - movement)
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 2533 ] [ Tree + DP ] 사회망 서비스(SNS) (0) | 2021.12.24 |
---|---|
[ 20955 ] [ Union-Find ] 민서의 응급 수술 (0) | 2021.12.23 |
[ 2602 ] [ DP ] 돌다리 건너기 (0) | 2021.12.16 |
[ 2482 ] [ DP ] 색상환 (0) | 2021.12.15 |
[ 9376 ] [ BFS ] 탈옥 (0) | 2021.12.13 |