def preorder(key):
if tree[key] == ('.','.'):
result[0] += key
return
result[0] += key
if tree[key][0] != '.':
preorder(tree[key][0])
if tree[key][1] != '.':
preorder(tree[key][1])
def inorder(key):
if tree[key] == ('.','.'):
result[1] += key
return
if tree[key][0] != '.':
inorder(tree[key][0])
result[1] += key
if tree[key][1] != '.':
inorder(tree[key][1])
def postorder(key):
if tree[key] == ('.','.'):
result[2] += key
return
if tree[key][0] != '.':
postorder(tree[key][0])
if tree[key][1] != '.':
postorder(tree[key][1])
result[2] += key
tree = {}
N = int(input())
for _ in range(N):
root,left,right = input().split()
tree[root] = (left,right)
result = ['','','']
preorder('A')
inorder('A')
postorder('A')
for answer in result:
print(answer)
트리의 대표적인 순회 종류인 전위, 중위, 후위 탐색기법을 적용시킨 것이다. 트리에 대해서 아직 잘 몰라, 실제 이진 트리를 만들면서 더 연습해봐야겠다.
일단 풀이는 재귀방식을 이용해서, 구해줬다. 일단
전위 순회 방식은 (루트 -> 왼쪽 -> 오른쪽 자식) 이므로, 함수를 돌릴때 root에 해당되는 함수에 들어온 key를 결과값에 넣어주고, 그 다음에 왼쪽 , 오른쪽 순으로 함수를 재귀적으로 실행시켜줬다.
중위 순회는 왼쪽 -> 루트 -> 오른쪽 순으로 해줬다.
후위 순회는 왼쪽 -> 오른쪽 -> 루트 순으로 해줬다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 9466 텀 프로젝트 (0) | 2021.02.15 |
---|---|
[BOJ/백준] 1759 암호 만들기 (0) | 2021.02.15 |
[BOJ/백준] 11047 동전 0 (0) | 2021.02.15 |
[BOJ/백준] 13549 숨바꼭질 3 (0) | 2021.02.13 |
[BOJ/백준] 9020 골드바흐의 추측 (0) | 2021.02.13 |