코딩테스트 대비/단계별 코딩 테스트 준비(27일 과정)

[트리/Python] 5639번: 이진 검색 트리 - 효과는 굉장했다!

bluetag_boy 2022. 2. 19. 17:28
반응형
 

5639번: 이진 검색 트리

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

www.acmicpc.net

 

 

알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 트리
  • 재귀

 

 

SOLUTION

import sys
sys.setrecursionlimit(10**6) 

def postorder(start, end):
    if start > end : # 더 이상 탐색할 노드 존재 X
        return
    
    root = preorder_list[start] # 시작 노드
    idx = start + 1
    
    for i in range(idx, end+1):
        # 서브 노드가 뿌리 노드보다 크다면 인덱스 재설정
        # 값이 역전되는 순간 root의 오른쪽 서브노드로 간 것이기 때문
        if preorder_list[i] > root: 
            idx = i
            break
        
    postorder(start+1, idx-1) # 루트의 왼쪽 서브 트리
    postorder(idx, end) # 루트의 오른쪽 서브 트리
    print(root)
    
preorder_list = []
while True:
    try:
        preorder_list.append(int(sys.stdin.readline()))
        
    except:
        break
    
postorder(0, len(preorder_list)-1)