[백준/BOJ][Python] 1991번 트리 순회

Eunding·2025년 3월 25일

algorithm

목록 보기
96/110

1991번 트리 순회

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


아이디어

딕셔너리에 본인을 key로 왼쪽 오른쪽을 value로 넣어주고
차례대로 전위, 중위, 후위 순회를 돌면 된다.

전위순회 (루트) (왼쪽 자식) (오른쪽 자식)
노드가 비어있지 않으면 본인을 출력하고 왼쪽 재귀, 오른쪽 재귀를 차례로 돈다.

중위순회 (왼쪽 자식) (루트) (오른쪽 자식)
노드가 비어있지 않으면 왼쪽 돌고 본인을 출력하고 오른쪽 재귀를 돈다.

후위순회 (왼쪽 자식) (오른쪽 자식) (루트)
노드가 비어있지 않으면 왼쪽 돌고 오른쪽 돌고 본인을 출력한다.


코드

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

def preorder(node): #전위 : 본인왼오
    if node != '.':
        print(node, end='')
        preorder(tree[node][0])
        preorder(tree[node][1])

def inorder(node): # 중위 : 왼본인오
    if node != '.':
        inorder(tree[node][0])
        print(node, end='')
        inorder(tree[node][1])

def postorder(node): # 왼오본인
    if node != '.':
        postorder(tree[node][0])
        postorder(tree[node][1])
        print(node, end='')

tree = {}
n = int(input()) # 노드 수
for i in range(n):
    x, y, z = input().split() # 본인 왼쪽 오른쪽
    tree[x] = [y, z]
preorder('A')
print()
inorder('A')
print()
postorder('A')

0개의 댓글