
실버 I
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
📌 문제
이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.

예를 들어 위와 같은 이진 트리가 입력되면,
- 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식)
- 중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식)
- 후위 순회한 결과 : DBEGFCA // (왼쪽 자식) (오른쪽 자식) (루트)
가 된다.
📤 입력
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파벳 대문자로 매겨지며, 항상 A가 루트 노드가 된다. 자식 노드가 없는 경우에는 .으로 표현한다.
📥 출력
첫째 줄에 전위 순회, 둘째 줄에 중위 순회, 셋째 줄에 후위 순회한 결과를 출력한다. 각 줄에 N개의 알파벳을 공백 없이 출력하면 된다.
💡 접근방식

트리의 특징
- 그래프의 한 종류로, '최소 연결 트리'라고도 불린다.
- 트리는 계층 모델이고, 사이클이 없다.(비순환 그래프)
- 노드가 N개인 트리는 항상 N-1개의 간선(edge)를 가진다.
- 순회의 방법은 preorder(전위순회), inorder(중위순회), postorder(후위순회)가 있다.
(위 사진의 용어는 맨 아래 두 번째 블로그 참고!)
전위 순회는 [루트 - 왼쪽 자식 - 오른쪽 자식] 순으로 순회
중위 순회는 [왼쪽 자식 - 루트 - 오른쪽 자식] 순으로 순회
후위 순회는 [왼쪽 자식 - 오른쪽 자식 - 루트] 순으로 순회
💻 코드
# https://www.acmicpc.net/problem/1991
# 트리 순회
N = int(input())
tree = {}
for n in range(N):
root, left, right = input().split()
# 트리 구조를 표현하는 방법
tree[root] = [left, right]
# 전위순회
def preorder(root):
if root != '.':
print(root, end='') # root
preorder(tree[root][0]) # left
preorder(tree[root][1]) # right
# 중위 순회
def inorder(root):
if root != '.':
inorder(tree[root][0]) # left
print(root, end='') # root
inorder(tree[root][1]) # right
# 후위 순회
def postorder(root):
if root != '.':
postorder(tree[root][0]) # left
postorder(tree[root][1]) # right
print(root, end='') # root
preorder('A')
print()
inorder('A')
print()
postorder('A')
📝 NOTE
참고한 블로그들
백준 1991번 - 트리 순회 / python 트리 구현
root를 key로 / left, right 자식들을 value로 할당한다.tree\[root] = left, right이렇게 tree의 인덱스는 KEY로, 저장되는 값은 VALUE로 사전에 저장할 수 있다.{"A" : ("B","C")}👉 의미 : A가 부모인 노드
velog.io
https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html
[자료구조] 트리(Tree)란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
https://withhamit.tistory.com/282
트리 순회(전위 순회, 중위 순회, 후위 순회)
트리를 배우면 같이 배우게 되는 개념 중 하나죠. 트리 순회에 대해 알아보겠습니다. 트리 순회에는 전위 순회(preorder), 중위 순회(inorder), 후위 순회(postorder) 가 있습니다. 텍스트 추가 [그림 1]은
withhamit.tistory.com