IT recording...

[BOJ] 1991 트리 순회 - python 본문

Algorithm

[BOJ] 1991 트리 순회 - python

I-one 2021. 12. 7. 11:06

최종 코드

import sys

def input():
    return sys.stdin.readline().rstrip()

N = int(input())

#트리구성 -> key : root, value : [left,right]
tree = {}
for _ in range(N):
    root,left,right = input().split(" ")
    tree[root] = [left,right]

def preorder(root):
    if root != '.':
        print(root, end='') #root
        preorder(tree[root][0]) #left
        preorder(tree[root][1]) #right

def inorder(root):
    if root != '.':
        inorder(tree[root][0]) #left
        print(root, end='') #root
        inorder(tree[root][1]) #right

def postorder(root):
    if root != '.':
        postorder(tree[root][0]) #left
        postorder(tree[root][1]) #right
        print(root, end='') #root

preorder('A')
print()
inorder('A')
print()
postorder('A')
  • 전위순회, 중위순회, 후위순회
  • #전위순회(preorder) : Root Left Right
    #중위순회(inorder) : Left Root Right
    #후위순회(postorder) : Left Right Root
    
    ------------------------------------------------------
    def preorder(root):
        if root != '.': #'.'리프 노드일 때는 그냥 return
            print(root, end='') #root
            preorder(tree[root][0]) #left
            preorder(tree[root][1]) #right
    
    def inorder(root):
        if root != '.':
            inorder(tree[root][0]) #left
            print(root, end='') #root
            inorder(tree[root][1]) #right
    
    def postorder(root):
        if root != '.':
            postorder(tree[root][0]) #left
            postorder(tree[root][1]) #right
            print(root, end='') #root
    

느낀점

"211207"

소요 시간 : 20min

  • tree 순회를 재귀함수를 이용하면 된다는 것 까지는 생각해냈지만 이를 어떻게 구현해야할지 몰라 정답을 보았다.
  • root를 프린트하는데, 왼쪽,오른쪽을 어떤 순서로 방문할 것인가를 생각하면 되는 문제

'Algorithm' 카테고리의 다른 글

[BOJ] 2504 괄호의 값 - python  (0) 2021.12.15
[BOJ] 6416 트리인가? - python  (0) 2021.12.07
[BOJ] 10828 스택 - python  (0) 2021.12.06
[BOJ] 7453 합이 0인 정수 - python  (0) 2021.12.02
[BOJ] 1072 두 배열의 합 - python  (0) 2021.12.02
Comments