알고리즘/백준[baekjoon]
[baekjoon] 백준 1991번 : 트리 순회 (by python 파이썬) 재귀
코딩하는이씨
2022. 8. 30. 19:41
728x90
반응형
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
정답 code
#트리 순회
import sys
input = sys.stdin.readline
#전위 순회
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(input())
tree = {}
for _ in range(n):
m,l,r = input().strip().split()
tree[m] = [l,r]
preorder("A")
print()
inorder("A")
print()
postorder("A")
solution
이번문제는 재귀 함수를 통해 풀었다.
트리는 딕셔너리로 표현하였다.
전위(preorder)순회 에는 부모노드를 출력하고 좌측 자식노드를 재귀한후 우측 자식노드를 재귀해주며 출력한다.
중위(inorder)순회에는 좌측 자식노드를 재귀한후 출력해나간후 부모노드를 그 후에 우측노드를 재귀해준다.
후위(postorder)순회에는 좌측 자식노드를 재귀후 우측자식노드를 재귀, 그 후로 부모노드를 출력해준다.
결국 언제출력하느냐에 차이다.
후에 비슷한유형의 문제가 나오면 훨씬 빠르게 해결 할 수 있을 것 같다.
728x90
반응형