코딩테스트 대비/BOJ

[Baekjoon/Python] 1991번: 트리 순회 - 효과는 굉장했다!

bluetag_boy 2022. 4. 3. 18:19
반응형
 

1991번: 트리 순회

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

www.acmicpc.net

 

알고리즘 분류

  • 트리
  • 재귀

 

 

SOLUTION

import sys

def preorder(root): # 전위 순위
    if root != '.':
        print(root, end="")     # 루트
        preorder(tree[root][0]) # 왼쪽
        preorder(tree[root][1]) # 오른쪽


def inorder(root): # 중위 순위
    if root != '.':
        inorder(tree[root][0]) # 왼쪽
        print(root, end="")    # 루트
        inorder(tree[root][1]) # 오른쪽


def postorder(root): #후위 순위
    if root != '.':
        postorder(tree[root][0]) # 왼쪽
        postorder(tree[root][1]) # 오른쪽
        print(root, end="")      # 루트


N = int(sys.stdin.readline())
tree = {} # dictionary로 설정해서 트리형태로 만듬

for _ in range(N):
    root, left, rigth = sys.stdin.readline().rstrip().split()
    tree[root] = [left, rigth] # 각 root 에 좌측, 우측 뿌리 노드 설정

preorder('A')
print()
inorder('A')
print()
postorder('A')