[백준/파이썬] 1991 트리 순회

#문제링크

https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net

#나의풀이

import sys

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='')

if __name__=="__main__":
    N = int(sys.stdin.readline())
    tree = {}

    for i in range(N):
        root, left, right = sys.stdin.readline().strip().split()
        tree[root] = [left, right]

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

#해설

트리의 가장 기본적인 문제일려나? 트리문제는 별로 풀어보지 않아서 풀어보았다.

기본적인 방법은 알고 있는데 파이썬으로 어떻게 구현해야할지 감이 안와서 다른사람들을 참고 했다.

 

N = int(sys.stdin.readline())
    tree = {}

    for i in range(N):
        root, left, right = sys.stdin.readline().strip().split()
        tree[root] = [left, right]

사실상 문제에서 가장 중요한 부분이 아닐까 싶다 트리를 구성하는 부분인데 딱히 특이한 부분은 없고

딕셔너리로 root의 left값과 right값을 넣어주고 이 값을 바탕으로 방문하게 된다.

 

전위, 중위, 후위 설명은 생략하겠다.