1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자
www.acmicpc.net
<내 코드>
def preorder(node):
if node == '.':
return
print(node, end="")
preorder(tree[node][0]) # tree[key][value], 왼쪽 자식 노드
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 = {}
# tree 생성
for _ in range(n):
root, left, right = input().split()
tree[root] = (left, right)
#print(tree)
preorder('A')
print()
inorder('A')
print()
postorder('A')
딕셔너리를 이용해 트리를 만들어준다. 그다음 각 순회 방식에 맞게 재귀를 이용해 함수를 작성해준다.
# tree
{
'A': ('B', 'C'),
'B': ('D', '.'),
'C': ('E', 'F'),
'E': ('.', '.'),
'F': ('.', 'G'),
'D': ('.', '.'),
'G': ('.', '.')
}
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 1967] 트리의 지름 - Python (트리, DFS) (0) | 2020.10.04 |
---|---|
[백준 11725] 트리 부모 찾기 - Python (DFS, 트리) (0) | 2020.10.03 |
[백준 2798] 블랙잭 - Python (브루트포스) (0) | 2020.10.03 |
[백준 13458] 시험 감독 - Python (수학) (0) | 2020.09.23 |
[백준 14503] 로봇 청소기 - Python (구현, 시뮬레이션) (0) | 2020.09.23 |