[BaekJoon] 백준 5639번 : 이진 검색 트리

Updated:

5639번 : 이진 검색 트리


처음엔 전위순회를 받아와 트리를 만든 뒤 후위순회를 하는 방식으로 풀었는데 시간초과가 발생했다.

정석적인 방법인데 시간초과가 발생해 당황했지만 괜히 전위순회를 입력으로 준게 아닐 것 같아 계속 방법을 찾아봤다.

image

이렇게 기준 값보다 작은 배열, 큰 배열을 나누고 또 거기서 계속 반복을 하면 됐다.

병합정렬과 비슷한 느낌..

그런데 index 처리가 너무 헷갈렸었는데 [Python]트리 백준 5639 덕분에 풀 수 있었던 문제였다.

알고리즘을 생각해도 구현을 못 해서 답답했었다..


import sys


def postOrder(start, end):
	if start > end:
		return

	pivot = end + 1
	for i in range(start + 1, end + 1):
		if data[i] > data[start]:
			pivot = i
			break

	postOrder(start + 1, pivot - 1)
	postOrder(pivot, end)
	print(data[start])


sys.setrecursionlimit(10 ** 9)
data = []
while True:
	try:
		data.append(int(input()))
	except:
		break

postOrder(0, len(data) - 1)



Categories:

Updated:

Leave a comment