Algorithm/Graph

[Baekjoon 1991 / python / 실버1] 트리 순회

양선규 2024. 3. 29. 10:36
728x90
반응형
import sys

n = int(sys.stdin.readline())
tree = {}
for _ in range(n):
    root, left, right = sys.stdin.readline().split()
    tree[root] = [left, right]  # {'root' : ['left', 'right']} 형태로 저장한다

def preorder(root):  # 전위 순회
    if root != '.':
        print(root, end='')
        preorder(tree[root][0])
        preorder(tree[root][1])

def inorder(root):  # 중위 순회
    if root != '.':
        inorder(tree[root][0])
        print(root, end='')
        inorder(tree[root][1])

def postorder(root):  # 후위 순회
    if root != '.':
        postorder(tree[root][0])
        postorder(tree[root][1])
        print(root, end='')

preorder('A')
print()
inorder('A')
print()
postorder('A')

 

그래프, 트리 문제이다. 그래프와 트리에 대한 대략적인 이해와 전위/중위/후위 순회가 무엇인지 선행학습이 필요한 문제이다. 트리의 연결관계를 인접 행렬 형태로 입력받아 문제를 해결했다.

 

선행학습이 되어 있다면 문제 자체는 크게 어렵지 않다. 다만 아예 처음 해 보는 사람은 순서대로 노드에 들리는 코드를 어떤 식으로 짜야 할 지 감이 안 올 수도 있겠다. 나도 처음이라 그랬다.

 

한번 코드를 짜고 나면 매우 쉽게 느껴질 문제이다.

728x90
반응형