P5639. 이진 검색 트리

wnajsldkf·2023년 4월 26일
0

Algorithm

목록 보기
53/58
post-thumbnail

설명

  • try~except를 이용해서 입력이 있을 때까지 받는다. except가 터지는 시점에 break를 걸어주면 입력받기를 중단할 수 있다.

  • 가장 작은 트리부터 확인한다. 루트보다 커지면 오른쪽 노드이고, 루트보다 작으면 왼쪽 노드이다. 루트보다 큰 값부터 끝까지 반복문을 돌면서 루트보다 큰 노드를 찾았다.

  • 왼쪽, 오른쪽 나뉘는 부분을 mid로 설정한다.

  • [start+1, mid-1] 왼쪽 노드, [mid, end] 오른쪽 노드로 구분한다.

  • 왼쪽 노드와 오른쪽 노드를 가장 작은 단위까지 확인한다.

    • 오른쪽 노드를 출력한다.
    • 루트를 출력한다.

코드

from sys import stdin as s
import sys
sys.setrecursionlimit(10**9)
s = open("input.txt", "rt")

num_list = []
while True:
    try:
        num = int(s.readline())
        num_list.append(num)
    except:
        break

def postorder(first, end):
    if first > end:
        return
    mid = end + 1   # 오른쪽 노드가 없을 경우
    for i in range(first + 1, end + 1):
        if num_list[first] < num_list[i]:
            mid = i
            break

    postorder(first + 1, mid - 1)
    postorder(mid, end)
    print(num_list[first])

postorder(0, len(num_list) - 1)
profile
https://mywnajsldkf.tistory.com -> 이사 중

0개의 댓글