#문제링크
https://www.acmicpc.net/problem/5639
5639번: 이진 검색 트리
트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다
www.acmicpc.net
#나의풀이
import sys
sys.setrecursionlimit(10**9)
def post(start, end):
if start > end:
return
mid = end + 1
for i in range(start+1, end+1):
if Num[i] > Num[start]:
mid = i
break
post(start+1, mid-1)
post(mid, end)
print(Num[start])
if __name__=="__main__":
Num = list()
while True:
try:
N = int(input())
Num.append(N)
except:
break
post(0, len(Num)-1)
#해설
while True:
try:
N = int(input())
Num.append(N)
except:
break
값을 계속 입력받고 더이상 입력받지 못하면 break로 끝낸다.
def post(start, end):
if start > end:
return
mid = end + 1
for i in range(start+1, end+1):
if Num[i] > Num[start]:
mid = i
break
start가 end보다 더 크다는건 탐색 범위가 끝났다는 것으로 바로 return으로 종료시키고
mid = end+1을 한 이유는 아래 반복문에서 현재보다 더 큰 값을 찾고 오른쪽 자식 노드로 mid를 설정할것인데 만약 나오지 않는다면 오른쪽은 없는것으로 탐색할 필요가 없으니 end+1로 end보다 크게 설정해주었다.
반복문을 돌면서 현재 root 보다 큰 값을 찾고 찾았다면 mid로 설정한다
post(start+1, mid-1)
post(mid, end)
print(Num[start])
후위순열 출력하는 방법 첫번째 post는 왼쪽노드를 찾는것 두번째는 오른쪽노드를 찾는것