5639번_이진 검색 트리
https://www.acmicpc.net/problem/5639
문제 요약
1. 이진 검색 트리에서 전위 순회(루트->왼쪽->오른쪽)한 값을 순서대로 입력
2. 입력 종료 조건이 없음 (입력 크기가 정해져있지 않음)
2. 입력 값을 이용하여 후위 순회(왼쪽->오른쪽->루트)한 값으로 출력
처음에 전위 순회해서 트리 전체를 만들고 후위 순회하려니까 시간 초과가 발생했다. 그래서 왼쪽 노드 < 루트 < 오른쪽 노드인 특성을 이용해서 입력값을 바로 확인하여 출력했다. (결국 다른 풀이 참고,,)
import sys
sys.setrecursionlimit(10**9)
nums = []
while True:
try:
nums.append(int(sys.stdin.readline()))
except:
break
def postorder(s, e):
if s > e:
return
mid = e + 1 # 오른쪽 노드가 없을 경우
for i in range(s+1, e+1):
if nums[s] < nums[i]:
mid = i
break
postorder(s+1, mid-1) # 왼쪽 확인
postorder(mid, e) # 오른쪽 확인
print(nums[s])
postorder(0, len(nums)-1)