백준(5639) - 이진 검색 트리 Python

최대 1 분 소요

백준(5639) - 이진 검색 트리

문제풀이: 이진트리, 파이썬

이진트리에서 전위 순회(preorder) 된 값을 후위 순회(postorder) 값으로 바꾸는 문제이다.

  • 왼쪽 자식 노드는 루트보다 작고, 오른쪽 자식노드는 루트보다 크다는 것을 이용해서 자식노드가 없는 노드부터 찾아서 하나씩 출력해주면 된다.
  • 그림으로 표현하려고 했으나 코드로 보는것이 오히려 더 직관적으로 이해가 잘 될 것 이다.
import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline


def post(start, end):
    if start > end:
        return
    else:
        root = pre[start]
        div = end + 1 # for문을 돌지 못할경우 다음 post에서 바로 빠져나올수 있도록 초기화
        for pos in range(start+1, end+1):
            if root < pre[pos]:
                div = pos
                break
        post(start+1, div-1)
        post(div, end)
        print(root)

pre = []
while True:
    try:
        x = int(input())
        pre.append(x)
    except:
        break
post(0, len(pre)-1)
            

댓글남기기