문제 풀이/[BaekJoon]
[BaekJoon] 1991 트리 순회 (Silver 1) - Python
조랩
2023. 1. 10. 01:04
문제
이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.
예를 들어 위와 같은 이진 트리가 입력되면,
- 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식)
- 중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식)
- 후위 순회한 결과 : DBEGFCA // (왼쪽 자식) (오른쪽 자식) (루트)
입출력 예시
입력: 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파벳 대문자로 매겨지며, 항상 A가 루트 노드가 된다. 자식 노드가 없는 경우에는 .으로 표현한다.
출력: 첫째 줄에 전위 순회, 둘째 줄에 중위 순회, 셋째 줄에 후위 순회한 결과를 출력한다. 각 줄에 N개의 알파벳을 공백 없이 출력하면 된다.
입력예시1)
7
A B C
B D .
C E F
E . .
F . G
D . .
G . .
출력예시1)
ABDCEFG
DBAECFG
DBEGFCA
코드
import sys
input = sys.stdin.readline
N = int(input())
tree = {}
for _ in range(N):
root, left, right = map(str, input().split())
tree[root] = [left, right]
def forward():
def _forward(x):
print(x, end = '')
if tree[x][0] != '.': _forward(tree[x][0])
if tree[x][1] != '.': _forward(tree[x][1])
_forward('A')
def inorder():
def _inorder(x):
if tree[x][0] != '.': _inorder(tree[x][0])
print(x, end = '')
if tree[x][1] != '.': _inorder(tree[x][1])
_inorder('A')
def postorder():
def _postorder(x):
if tree[x][0] != '.': _postorder(tree[x][0])
if tree[x][1] != '.': _postorder(tree[x][1])
print(x, end = '')
_postorder('A')
forward()
print()
inorder()
print()
postorder()
실행 화면
채점 결과
728x90