[골드 1] 백준 2263 - 트리의 순회 (파이썬)
글 작성자: pental
https://www.acmicpc.net/problem/2263
풀이
트리 재구성 및 전위 순회 출력을 하는 문제이다.
문제는 중위 순회와 후위 순회 결과를 통해 전위 순회 결과를 구하는 것이다.
- 입력
- 첫 줄 : 노드 개수 N
- 둘째 줄 : 중위 순회 결과 INORDER
- 셋째 줄 : 후위 순회 결과 POSTORDER
- 출력
- 전위 순회 결과
순회 정의
전위(preorder) | Root → Left → Right |
중위(inorder) | Left → Root → Right |
후위(postorder) | Left → Right → Root |
- 후위 순회의 마지막 원소는 항상 현재 서브트리의 루트 노드이다.
- 루트 값을 중위 순회에서 찾아 좌/우 서브트리의 범위를 나눈다.
- 나뉜 범위를 이용해 재귀적으로 좌/우 서브트리를 계속 분할한다.
- 루트를 먼저 출력하므로 전위 순회가 된다.
코드
# 백준 2263 - 트리의 순회
# 분류 : 트리
import sys
sys.setrecursionlimit(10 ** 6)
input = sys.stdin.readline
N = int(input())
INORDER = list(map(int, input().split()))
POSTORDER = list(map(int, input().split()))
INDEX = {val : idx for idx, val in enumerate(INORDER)}
def build(in_start, in_end, post_start, post_end) :
if in_start > in_end or post_start > post_end :
return
root = POSTORDER[post_end]
print(root, end = ' ')
root_index = INDEX[root]
left_size = root_index - in_start
build(in_start, root_index - 1, post_start, post_start + left_size - 1)
build(root_index + 1, in_end, post_start + left_size, post_end - 1)
build(0, N - 1, 0, N - 1)
'Programming > 백준' 카테고리의 다른 글
[실버 2] 백준 25186 - INFP 두람 (파이썬) (0) | 2025.05.09 |
---|---|
[골드 4] 백준 5639 - 이진 검색 트리 (파이썬) (0) | 2025.05.08 |
[골드 5] 백준 1916 - 최소비용 구하기 (파이썬) (0) | 2025.05.08 |
[실버 1] 백준 27970 - OX (파이썬) (0) | 2025.05.08 |
[실버 1] 백준 1697 - 숨바꼭질 (파이썬) (0) | 2025.05.08 |
댓글
이 글 공유하기
다른 글
-
[실버 2] 백준 25186 - INFP 두람 (파이썬)
[실버 2] 백준 25186 - INFP 두람 (파이썬)
2025.05.09 -
[골드 4] 백준 5639 - 이진 검색 트리 (파이썬)
[골드 4] 백준 5639 - 이진 검색 트리 (파이썬)
2025.05.08 -
[골드 5] 백준 1916 - 최소비용 구하기 (파이썬)
[골드 5] 백준 1916 - 최소비용 구하기 (파이썬)
2025.05.08 -
[실버 1] 백준 27970 - OX (파이썬)
[실버 1] 백준 27970 - OX (파이썬)
2025.05.08