1991 트리 순회
업데이트:
1. 문제
문제는 링크에 들어가면 있다.
2. 정답 코드
문제의 내 정답 코드는 다음과 같다.
import sys
read = sys.stdin.readline
N = int(read())
graph = {}
for i in range(1,N+1):
root,left,right = read().split()
graph[root] = [left,right]
def preorder(trees,now):
print(now,end='')
left = trees[now][0]
right = trees[now][1]
# left 순회
if left != '.' :
preorder(trees,left)
# right 순회
if right != '.' :
preorder(trees,right)
# print의 순서만 바꿈으로써 이게 다 되네..;
# 아직은 잘 모르겠다.
def inorder(trees,now):
left = trees[now][0]
right = trees[now][1]
# left 순회
if left != '.' :
inorder(trees,left)
print(now,end='')
# right 순회
if right != '.' :
inorder(trees,right)
def postorder(trees,now):
left = trees[now][0]
right = trees[now][1]
# left 순회
if left != '.' :
postorder(trees,left)
# right 순회
if right != '.' :
postorder(trees,right)
print(now,end='')
preorder(graph, 'A')
print()
inorder(graph,'A')
print()
postorder(graph,'A')
3. 생각 및 풀이
생각
이 문제는 기본적인 트리문제이다. 전위,중위,후위 순회 방법에 대해서 알기만 하면 된다.
문제 풀이
전위 순회는 root -> left -> right 순으로 노드를 훑는 것으로써 left의 위에 print를 쓴다. 중위 순회는 left -> root -> right 순으로 노드를 훑는 것으로써 left,right의 사이에 print를 쓴다. 후위 순회는 left -> right -> root 순으로 노드를 훑는 것으로써 right의 아래에 print를 쓴다.
되게 간단하게 문제를 해결할 수 있다는 것에 신기하다.