코테/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))
문자를 숫자로 변환해 배열에 저장하고 트리를 순회하면 된다.
반응형