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
반응형
'알고리즘 > 백준[baekjoon]' 카테고리의 다른 글
[baekjoon] 백준 2206번 : 벽 부수고 이동하기 (by python 파이썬) bfs (0) | 2022.09.02 |
---|---|
[baekjoon] 백준 2096번 : 내려가기 (by python 파이썬) 다이나믹프로그래밍 dp (1) | 2022.08.31 |
[baekjoon] 백준 1932 번 : 정수 삼각형 (by python 파이썬) (0) | 2022.08.25 |
[baekjoon] 백준 1918번 : 후위 표기식 (by python 파이썬) 스택 stack (0) | 2022.08.24 |
[baekjoon] 백준 1916번 : 최소비용 구하기(by python 파이썬) 다익스트라 최단거리 (0) | 2022.08.23 |