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를 프린트하는데, 왼쪽,오른쪽을 어떤 순서로 방문할 것인가를 생각하면 되는 문제