코딩테스트 문제

[Python/백준] 트리 순회

왕초보코딩러 2024. 10. 15. 21:05
728x90

 

전위 순회(preorder): A -> B -> C

중위 순회(inorder): B -> A -> C

후위 순회(postorder): B -> C -> A

 

 


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

 


재귀 함수를 이용

 

 

입력 및 트리 만들기

import sys
input = sys.stdin.readline

n = int(input())

tree = {}
for _ in range(n):
    a, b, c = input().split()
    tree[a] = [b,c] # 0번 인덱스는 왼쪽 1번 인덱스는 오른쪽
    
print(tree)

{'A': ['B', 'C'], 'B': ['D', '.'], 'C': ['E', 'F'], 'E': ['.', '.'], 'F': ['.', 'G'], 'D': ['.', '.'], 'G': ['.', '.']}

 

전위, 중위, 후위 함수 만들기

def preorder(node):
    print(node, end='') # 가운데
    if tree[node][0] != '.':
        preorder(tree[node][0]) # 왼쪽
    if tree[node][1] != '.':
        preorder(tree[node][1]) # 오른쪽
        
def inorder(node):
    if tree[node][0] != '.':
        inorder(tree[node][0]) # 왼쪽
    print(node, end='') # 가운데
    if tree[node][1] != '.':
        inorder(tree[node][1]) # 오른쪽
        
def postorder(node):
    if tree[node][0] != '.':
        postorder(tree[node][0]) # 왼쪽
    if tree[node][1] != '.':
        postorder(tree[node][1]) # 오른쪽
    print(node, end='') # 가운데

 

루트 넣어주기

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

'코딩테스트 문제' 카테고리의 다른 글

[백준/Python] 동물원  (0) 2024.10.29
[백준/Python] 이진 검색 트리  (1) 2024.10.17
[백준/Python] 트리의 부모 찾기  (0) 2024.10.14
[백준/Python] 특정한 최단 경로  (1) 2024.10.09
[Python/백준] 운동  (1) 2024.10.05