Hanbit the Developer
[Python] 백준 5639번: 이진 검색 트리 본문
https://www.acmicpc.net/problem/5639
import sys
sys.setrecursionlimit(100000)
input = sys.stdin.readline
def getPostorder(nums):
length = len(nums)
if length <= 1:
return nums
for i in range(1, length):
if nums[i] > nums[0]:
return getPostorder(nums[1:i]) + getPostorder(nums[i:]) + [nums[0]]
return getPostorder(nums[1:]) + [nums[0]]
if __name__ == '__main__':
nums = []
while True:
try:
nums.append(int(input()))
except:
break
nums = getPostorder(nums)
for n in nums:
print(n)
가장 앞에 있는 root 노드로 비교해서 left, right를 구분한 뒤, left, right에 대해 재귀함수를 호출해서 left+right+root 순으로 반환하면 된다.
여기서 입력의 길이가 정해져있지 않으므로, EOF가 입력되면 에러가 나는 것을 이용해 try-catch를 통해 입력받는다는 점이 중요하다.
'Algorithm > 백준' 카테고리의 다른 글
[Python] 백준 11779번: 최소비용 구하기 2 (0) | 2021.07.22 |
---|---|
[Python] 백준 10830번: 행렬 제곱 (0) | 2021.07.21 |
[Python] 백준 2638번: 치즈 (0) | 2021.07.19 |
[Python] 백준 2448번: 별 찍기 - 11 (0) | 2021.07.18 |
[Python] 백준 1916번: 최소비용 구하기 (0) | 2021.07.16 |