업데이트:

카테고리: , ,

1. 문제

문제는 링크에 들어가면 있다.

2. 정답 코드

문제의 내 정답 코드는 다음과 같다.

import sys
read = sys.stdin.readline

N = int(read())

graph = {}
for i in range(1,N+1):
    root,left,right = read().split()
    graph[root] = [left,right]

def preorder(trees,now):
    print(now,end='')

    left = trees[now][0]
    right = trees[now][1]
    # left 순회
    if left != '.' :
        preorder(trees,left)
    # right 순회
    if right != '.' :
        preorder(trees,right)

# print의 순서만 바꿈으로써 이게 다 되네..;
# 아직은 잘 모르겠다.
def inorder(trees,now):

    left = trees[now][0]
    right = trees[now][1]
    # left 순회
    if left != '.' :
        inorder(trees,left)
    print(now,end='')
    # right 순회
    if right != '.' :
        inorder(trees,right)

def postorder(trees,now):

    left = trees[now][0]
    right = trees[now][1]
    # left 순회
    if left != '.' :
        postorder(trees,left)
    # right 순회
    if right != '.' :
        postorder(trees,right)
    print(now,end='')

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





3. 생각 및 풀이


생각

이 문제는 기본적인 트리문제이다. 전위,중위,후위 순회 방법에 대해서 알기만 하면 된다.


문제 풀이

전위 순회는 root -> left -> right 순으로 노드를 훑는 것으로써 left의 위에 print를 쓴다. 중위 순회는 left -> root -> right 순으로 노드를 훑는 것으로써 left,right의 사이에 print를 쓴다. 후위 순회는 left -> right -> root 순으로 노드를 훑는 것으로써 right의 아래에 print를 쓴다.

되게 간단하게 문제를 해결할 수 있다는 것에 신기하다.

1 분 소요