문제 링크
https://www.acmicpc.net/problem/2263
2263번: 트리의 순회
첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다.
www.acmicpc.net
풀이 - 다른 블로그 참고
전위 순회 : (정점)(왼쪽)(오른쪽)
후외순회 : (왼쪽)(오른쪽)(정점)
중위순회 : (왼쪽)(정점)(오른쪽)
중위 순회와 후위순회를 통해 트리를 구할 수 있다.
1. 후위 순회의 마지막 숫자는 전위 숫자의 처음 숫자이다.
후위 순회는 (왼쪽)(오른쪽)(정점), 전위 순회는 (정점)(왼쪽)(오른쪽) 이기 때문
2. 중위 순회로 정점을 기준으로 왼쪽 서브 트리의 노드수, 오른쪽 서브 트리의 노드 수 알 수 있다.
# https://www.acmicpc.net/problem/2263
import sys
sys.setrecursionlimit(10 **5)
input = sys.stdin.readline
n = int(input())
inorder = list(map(int,input().split()))
post = list(map(int,input().split()))
index = [0] * (n+1)
# 정점의 인덱스 저장 -> 왼쪽 서브 트리 노드 수, 오른쪽 서브 트리 노드 수 알 수 있음
for i in range(n):
index[inorder[i]] = i
def preorder(istart,iend,pstart,pend):
# 역전 시 중단
if istart > iend or pstart > pend:
return
# 후위 순회의 맨 마지막 정점은 전위 순회의 처음 정점
root = post[pend]
# 전위 순회이므로 정점 출력 먼저
print(root, end = " ")
# 왼쪽 서브 트리
left = index[root] - istart
# 오른쪽 서브 트리
right = iend - index[root]
# 중위순회, 후위 순회의 왼쪽 서브 트리
preorder(istart, istart + left -1 , pstart, pstart + left -1)
# 중위순회, 후위 순회의 오른쪽 서브 트리
preorder(iend - right +1, iend, pend-right, pend-1)
preorder(0,n-1,0,n-1)
- 어렵다 ㅠㅠ 반복해서 풀어보기
+ 트리 순회 관련 백준 문제
- 트리가 주어졌을 때 전위, 후위, 중위 순회 문제 : https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
- 전위 순회가 주어졌을 때, 후위 순회 구하는 문제 : https://www.acmicpc.net/problem/5639
5639번: 이진 검색 트리
트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다
www.acmicpc.net
- 후위 순회, 중위 순회가 주어졌을 때, 전위 순회를 구하는 문제 : https://www.acmicpc.net/problem/2263
2263번: 트리의 순회
첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다.
www.acmicpc.net
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level2] H-index - python (0) | 2022.03.25 |
---|---|
[프로그래머스][level2] 행렬 테두리 회전하기 - python (0) | 2022.03.25 |
[백준 11779번] 최소비용 구하기 2 - python (0) | 2022.03.18 |
[백준 1918번] 후위 표기식 - python (0) | 2022.03.18 |
[백준 5639번] 이진 검색 트리 - python (0) | 2022.03.18 |