문제 링크 : https://www.acmicpc.net/problem/5639
이진 검색 트리 + 재귀 문제. 얻어가는게 많았던 좋은 문젠거 같다. 이런 흐름으로 문제를 풀었다.
import sys sys.setrecursionlimit(10**6) arr = [] answer = [] while True: try: x = int(sys.stdin.readline()) arr.append(x) except: break def preorder_to_postorder(tree): if len(tree) == 0: return if len(tree) == 1: answer.append(tree[0]) return root = tree[0] pivot = len(tree) for i in range(1, len(tree)): if root < tree[i]: pivot = i break preorder_to_postorder(tree[1:pivot]) preorder_to_postorder(tree[pivot:]) answer.append(root) preorder_to_postorder(arr) for x in answer: print(x)
import sys arr = [] while True: try: x = int(sys.stdin.readline()) arr.append(x) except: break # [left, right] tree = dict() root = arr[0] def insert(node, a): # node 의 자식이 없다면 if node not in tree: if node > a: tree[node] = [a, 0] else: tree[node] = [0, a] return # node 의 자식이 있다면 else: if node > a: if tree[node][0] == 0: tree[node][0] = a else: insert(tree[node][0], a) else: if tree[node][1] == 0: tree[node][1] = a else: insert(tree[node][1], a) return for x in arr[1:]: insert(root, x) print(tree) ''' 입력 50 30 24 5 28 45 98 52 60 출력 결과 {50: [30, 98], 30: [24, 45], 24: [5, 28], 98: [52, 0], 52: [0, 60]} '''