yha97 2023. 5. 15. 10:05

날짜 : 2023. 05. 15

사용 언어 : python

 

문제

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

 

 

코드

import sys
sys.setrecursionlimit(int(10**6))

def preorder(node): # 전위순회(Root, Left, Right)
    print(tree[node][1], end="")  # root
    if tree[node][0] != '.':  # left
        preorder(tree[node][0])
    if tree[node][2] != '.':  # right
        preorder(tree[node][2])
    return

def inorder(node): # 중위순회(Left, Root, Right)
    if tree[node][0] != '.':
        inorder(tree[node][0])
    print(tree[node][1], end="")
    if tree[node][2] != '.':  # right
        inorder(tree[node][2])
    return

def postorder(node): # 후위순회(Left, Right, Root)
    if tree[node][0] != '.':
        postorder(tree[node][0])
    if tree[node][2] != '.':  # right
        postorder(tree[node][2])
    print(tree[node][1], end="")
    return

n = int(sys.stdin.readline())
tree = dict()
for _ in range(n):
    root, l, r = sys.stdin.readline().rstrip().split()
    tree[root] = (l, root, r)
#print(tree)
preorder('A')
print()
inorder('A')
print()
postorder('A')

 

 

풀이

- 전위, 후위, 중위순회를 구현

- root, left, right를 입력받은 후 해시에 저장한 다음 조건에 맞게 재귀 방식으로 출력한다.

 

 

알게된 점

- 강의 들으면서 푸니까 뇌를 빼고 푸는거같다;;

 

 

참고 사이트