알고리즘||코딩테스트/백준

1991번 트리 순회(Silver1)

째로스 2023. 6. 23. 15:58

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

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net

import sys

class Node:
    def __init__(self,data,left_node,right_node):
        self.data=data
        self.left_node=left_node
        self.right_node=right_node

nodes={}
def pre_order(node):
    print(node.data,end='')
    if node.left_node!=None:
        pre_order(nodes[node.left_node])
    if node.right_node!=None:
        pre_order(nodes[node.right_node])

def in_order(node):
    if node.left_node!=None:
        in_order(nodes[node.left_node])
    print(node.data,end='')
    if node.right_node!=None:
        in_order(nodes[node.right_node])

def post_order(node):
    if node.left_node != None:
        post_order(nodes[node.left_node])
    if node.right_node != None:
        post_order(nodes[node.right_node])
    print(node.data,end='')

n=int(sys.stdin.readline())
for i in range(n):
    data,left_node,right_node=sys.stdin.readline().split()
    if left_node==".":
        left_node=None
    if right_node==".":
        right_node=None
    nodes[data]=Node(data,left_node,right_node)

pre_order(nodes['A'])
print()
in_order(nodes['A'])
print()
post_order(nodes['A'])

전형적인 트리 전위,중위,후위 순회 알고리즘을 사용하여 푼 문제였다.