본문 바로가기

개발/algorithm

[백준 1991번] 트리 순회 - python

문제 링크

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

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파

www.acmicpc.net

풀이

- 처음엔 bfs로 접근했는데 그래프 문제가 아닌 재귀로 풀면 되는 문제 

- 전위 순회는 root -> left -> right 

   중위 순회는 left -> root -> right

   후위 순회는 left -> right -> root 

left, right의 subtree에 대하여 재귀로 함수 실행 

def preorder(node):
  if node == '.':
    return 
  print(node,end="")
  preorder(tree[node][0])
  preorder(tree[node][1])

def inorder(node):
  if node == '.':
    return 
  inorder(tree[node][0])
  print(node, end="")
  inorder(tree[node][1])

def postorder(node):
  if node == '.':
    return
  postorder(tree[node][0])
  postorder(tree[node][1])
  print(node, end="")
  
n = int(input())
tree = {}

for _ in range(n):
  a, b, c = input().split()
  tree[a] = (b,c)

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