MapleStory Finger Point

[BOJ] #1991 - 트리 순회

2021. 6. 18. 15:43Problem Solving/Online Judge

 

1991번: 트리 순회

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

www.acmicpc.net

 

 

** 문제 유형

  • 트리, 구현

 

** 풀이

  1. 전위 순회: 루트 -> 왼쪽 자식 -> 오른쪽 자식
  2. 중위 순회: 왼쪽 자식 -> 루트 -> 오른쪽 자식 <왼쪽부터 차례대로 출력>
  3. 후위 순회: 왼쪽 자식 -> 오른쪽 자식 -> 루트

 

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

def pre_order(node): # 중 -> 왼 -> 오
    print(node.data, end = '')
    if node.left_node != '.':
        pre_order(tree[node.left_node])
    if node.right_node != '.':
        pre_order(tree[node.right_node])
        
def in_order(node): # 왼 -> 중 -> 오
    if node.left_node != '.':
        in_order(tree[node.left_node])
    print(node.data, end = '')
    if node.right_node != '.':
        in_order(tree[node.right_node])
        
def post_order(node): # 왼 -> 오 -> 중
    if node.left_node != '.':
        post_order(tree[node.left_node])
    if node.right_node != '.':
        post_order(tree[node.right_node])
    print(node.data, end = '')

n = int(input())

tree = {}

for _ in range(n):
    data, left_node, right_node = input().split()
    
    tree[data] = Node(data, left_node, right_node)

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

 

 

 

'Problem Solving > Online Judge' 카테고리의 다른 글

[BOJ] #1926 - 최소 힙  (0) 2021.06.18
[BOJ] #2250 - 트리의 높이와 너비  (0) 2021.06.18
[BOJ] #1939 - 중량제한  (0) 2021.06.16
[BOJ] #2110 - 공유기 설치  (0) 2021.06.16
[BOJ] #1236 - 성 지키기  (0) 2021.06.15