-풀이
class Node:
def __init__(self, item, left, right):
self.item = item
self.left = left
self.right = right
def preorder(node): # 전위 순회
print(node.item, end='')
if node.left != '.':
preorder(tree[node.left])
if node.right != '.':
preorder(tree[node.right])
def inorder(node): # 중위 순회
if node.left != '.':
inorder(tree[node.left])
print(node.item, end='')
if node.right != '.':
inorder(tree[node.right])
def postorder(node): # 후위 순회
if node.left != '.':
postorder(tree[node.left])
if node.right != '.':
postorder(tree[node.right])
print(node.item, end='')
if __name__ == "__main__":
N = int(input())
tree = {}
for _ in range(N):
node, left, right = map(str, input().split())
tree[node] = Node(item=node, left=left, right=right)
preorder(tree['A'])
print()
inorder(tree['A'])
print()
postorder(tree['A'])
-풀이 설명
[30분 no sol] 전위 순회는 DFS랑 비슷한 느낌이라서 DFS로 풀면되나 싶었는데 중위, 후위 구하는 법이 생각이 안나서 풀이를보게 되었다. 이 문제는 트리를 이용해 푸는 것이었다. 트리를 한 번도 풀어본 적이 없었는데 트리를 처음 배우게 된 계기가 되었다. 풀이 방법은 def함수로 출력값의 위치를 조절하여 전위, 중위, 후위로 나누어 함수를 차례대로 실행하면 되었다. 하지만 아직은 tree[node] = Node(item=node, left=left, right=right) 이 코드와 맨 위 클래스 Node코드가 잘 이해가 가지 않아서 트리에 대해 좀 더 자세히 알아봐야겠다.
출처 : https://jjangsungwon.tistory.com/12
2022/01/06 오전 1:38 복습 + 이해 완료
'알고리즘' 카테고리의 다른 글
[수학] 백준 1026파이썬 (보물) 실버4 (0) | 2021.12.18 |
---|---|
[기하학] 백준 1004 파이썬 (어린 왕자) 실버3 (0) | 2021.12.17 |
[그래프 탐색] 백준 2146 파이썬 (다리 만들기) 골드3 (0) | 2021.11.27 |
[그래프 탐색] 백준 2178 파이썬 (미로 탐색) 실버 1 (0) | 2021.11.26 |
[그래프 탐색] 백준 7576 파이썬 (토마토) 실버1 (0) | 2021.11.25 |