동캄의 코딩도장

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

코테/BOJ

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

동 캄 2025. 2. 4. 00:31
반응형

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

 

 

예전에는 트리가 어려워서 손도 못댔는데, 왜인지 조금은 가까워진거같다. (물론, 아직 갈길이 아주멀다.)

 

# 백준 1991 트리순회
import sys
A_ord= 65
N=int(sys.stdin.readline())
# 트리생성
Tree=[[]  for _ in range(N)]
for _ in range(N):
    parent,left_child,right_child=map(str,sys.stdin.readline().split())
    Tree[ord(parent)-A_ord]=[ord(left_child)-A_ord,ord(right_child)-A_ord]

#전위
def pre_ord(node):
    if Tree[node][0]<0 and Tree[node][1]<0:
        return chr(node+65)
    elif Tree[node][1]<0:
        return chr(node+65)+pre_ord(Tree[node][0])
    elif Tree[node][0]<0:
        return chr(node+65)+pre_ord(Tree[node][1])
    else:
        return chr(node+65) + pre_ord(Tree[node][0]) +pre_ord(Tree[node][1])
    
#중위
def in_ord(node):
    if Tree[node][0]<0 and Tree[node][1]<0:
        return chr(node+65)
    elif Tree[node][1]<0:
        return in_ord(Tree[node][0])+chr(node+65)
    elif Tree[node][0]<0:
        return chr(node+65)+in_ord(Tree[node][1])
    else:
        return  in_ord(Tree[node][0]) + chr(node+65) +in_ord(Tree[node][1])

#후위
def post_ord(node):
    if Tree[node][0]<0 and Tree[node][1]<0:
        return chr(node+65)
    elif Tree[node][1]<0:
        return post_ord(Tree[node][0])+chr(node+65)
    elif Tree[node][0]<0:
        return post_ord(Tree[node][1])+chr(node+65)
    else:
        return  post_ord(Tree[node][0]) + post_ord(Tree[node][1]) + chr(node+65)
print(pre_ord(0))
print(in_ord(0))
print(post_ord(0))

문자를 숫자로 변환해 배열에 저장하고 트리를 순회하면 된다.

반응형