Hanbit the Developer

[Python] 백준 5639번: 이진 검색 트리 본문

Algorithm/백준

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

hanbikan 2021. 7. 20. 12:03

https://www.acmicpc.net/problem/5639

 

5639번: 이진 검색 트리

트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다

www.acmicpc.net

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를 통해 입력받는다는 점이 중요하다.