[백준/파이썬] 5639번 이진 검색 트리 풀이

업데이트:



문제 정보


풀이

문제

전위 순회 결과가 주어졌을 때, 후위 순회 결과를 출력하는 문제입니다.

코드

import sys

sys.setrecursionlimit(10000)

class Node:
    def __init__(self, key, left = None, right = None):
        self.key = key
        self.left = left
        self.right = right

def post_order_traversal(tree, results):
    if tree.left != None: post_order_traversal(tree.left, results)
    if tree.right != None: post_order_traversal(tree.right, results)
    results.append(tree.key)

for line in sys.stdin:
    key = int(line)
    try:
        tmp = tree
        while True:
            if key < tmp.key:
                if tmp.left is None:
                    tmp.left = Node(key)
                    break
                tmp = tmp.left
            elif key > tmp.key:
                if tmp.right is None:
                    tmp.right = Node(key)
                    break
                tmp = tmp.right
    except: tree = Node(key)

results = []
post_order_traversal(tree, results)
print('\n'.join(map(str, results)))

설명

전위 입력 순서대로 BST를 구성한 뒤, 재귀 후위 순회(왼쪽-오른쪽-루트)로 결과를 출력합니다.



댓글남기기