본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 5639 이진 검색 트리

by Alan_Kim 2023. 3. 5.
728x90
반응형

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

 

5639번: 이진 검색 트리

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

www.acmicpc.net

 

문제 해결

전위 순회(preorder)한 노드의 value 값을 리스트 안에 차례대로 받는다.

인덱스를 차례대로 키워가며 노드의 value 값이 이전보다 작으면 깊이를 늘리지 않고 오른쪽 자식 값으로 가는 규칙이 있다.

이 트리를 후위 순회(postorder)한 결과를 출력하는 것이 문제

인덱스를 이용하여 후위 순회 함수를 만들면 된다.

중간에 노드의 value 값이 이전보다 작아 더 깊이 들어가는 것이 아닌 오른쪽 자식으로 가는 index를 mid로 잡고 후위 순회 함수를 만들면 된다.

 

CODE

import sys
sys.setrecursionlimit(100000)
tree = []
que = []
while True:
    try:
        que.append(int(input()))
    except EOFError:
        break

def postorder(first,end):
    if first>end:
        return
    mid = end + 1 # 루트보다 큰 값이 존재하지 않을 경우 대비
    for i in range(first+1,end+1):
        if que[first] < que[i]: # 오른쪽 리프에 생겨야하는 i
            mid = i
            break
    postorder(first+1, mid-1)
    postorder(mid,end)
    print(que[first])
postorder(0,len(que)-1)
728x90
반응형

'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글

[python] 백준 15686 치킨 배달  (1) 2023.03.05
[python] 백준 1072 게임  (0) 2023.03.05
[python] 백준 3190 뱀  (0) 2023.03.05
[python] 백준 2251 물통  (0) 2023.02.28
[python] 백준 1525 퍼즐  (0) 2023.02.28

댓글