Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Charfield
- 백준 7576번
- 백준 7576
- json
- 백준 1158
- 백준 1158번
- 1010번: 다리 놓기 (Python)
- 백준 토마토
- epsp
- ncp배포
- 백준
- PS
- linc3.0
- NaverCloudPlatform
- 7576번
- Django
- python
- 다리 놓기
- lgh
- 요세푸스 문제
- ncloud서버
- 그래프 탐색
- 백준 다리놓기
- 경상국립대학교
- 문제풀이
- 16953
- 9735번
- max_length
- 고속거듭제곱알고리즘
- 5397
Archives
- Today
- Total
DolphinDash
백준 1991번: 트리 순회 (Python) 본문
트리의 순회 방식 3가지를 알면 쉽게 풀 수 있는 문제다.
Preorder (전위 순회)
루트부터 먼저 방문한 다음 왼쪽 하위 트리, 오른쪽 하위 트리 순으로 방문하는 방식
Inorder (중위 순회)
왼쪽 하위 트리 먼저 방문하고 이후 루트 트리, 오른쪽 하위 트리 순으로 방문하는 방식
Postorder (후위 순회)
왼쪽 하위 트리 먼저 방문한 후 이후 오른쪽 하위 트리, 마지막으로 루트 트리를 방문하는 방식
딕셔너리로 노트 이름을 저장해 set으로 양쪽 자식들을 저장했다.
n = int(input())
nodes = {}
for i in range(n):
node, leftnode, rightnode = input().split()
nodes[node] = (leftnode, rightnode)
def preorder(node):
print(node, end="")
if nodes[node][0] != ".":
preorder(nodes[node][0])
if nodes[node][1] != ".":
preorder(nodes[node][1])
def inorder(node):
if nodes[node][0] != ".":
inorder(nodes[node][0])
print(node, end="")
if nodes[node][1] != ".":
inorder(nodes[node][1])
def postorder(node):
if nodes[node][0] != ".":
postorder(nodes[node][0])
if nodes[node][1] != ".":
postorder(nodes[node][1])
print(node, end="")
preorder("A")
print()
inorder("A")
print()
postorder("A")
위 3가지 방식이 있는데 코드로는 재귀로 더 간단하게 나타낼 수 있다. 전위 중위 후위 헷갈릴 수 있는데 루트가 언제 방문하는지를 생각하면서 나누면 방지할 수 있다.
전위 = 루트를 처음 방문, 중위 = 루트를 중간에 방문, 후위 = 루트를 나중에 방문
'PS > Solve' 카테고리의 다른 글
백준 1158번: 요세푸스 문제 (Python) (0) | 2023.05.23 |
---|---|
백준 1010번: 다리 놓기 (Python) (0) | 2023.05.23 |
백준 16953번: A → B (Python) (0) | 2023.05.19 |
백준 1629번: 곱셈 (Python) (0) | 2023.04.06 |
백준 5397번: 키로거 (Python) (0) | 2023.04.06 |