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
- 위상정렬
- 다익스트라
- DFS
- 이모티콘할인행사
- BFS
- 그래프탐색
- javascript
- DP
- 알고리즘
- 자물쇠와열쇠
- 사이클게임
- 파괴되지않은건물
- 두큐합같게만들기
- 벽부수고이동하기
- 구현
- 거리두기확인하기
- 징검다리건너기
- 최단경로
- RGB거리2
- [1차]캐시
- 도넛과막대그래프
- 최소스패닝트리
- 파이썬
- 섬연결하기
- 프로그래머스
- 프림알고리즘
- 트리의지름
- 17404
- 백준
- 큐
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘/파이썬] 백준 1191 - 트리순회 본문
문제
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
풀이
트리 순회에 대한 기본적인 문제다. 전위 중위 후위 다 까먹고 있었는데 오랜만에 기억을 더듬더듬.. 하니 좋았다.
트리는 딕셔너리 형태로 구현했다. 트리의 순회는 일정한 기준으로 왼쪽 먼저 순회라면 왼쪽을 다 순회한 후 다음 노드를 순회한다. 따라서 재귀를 통해 원하는 부분 먼저 끝까지 순회할 수 있게끔 해줘야 한다.
코드
N = int(input())
tree = {}
for n in range(N):
root, left, right =input().split()
tree[root] = [left, right]
def preorder(root):
if root != '.':
print(root, end='')
preorder(tree[root][0])
preorder(tree[root][1])
def inorder(root):
if root != '.':
inorder(tree[root][0])
print(root, end='')
inorder(tree[root][1])
def postorder(root):
if root != '.':
postorder(tree[root][0])
postorder(tree[root][1])
print(root, end='')
preorder('A')
print()
inorder('A')
print()
postorder('A')
'알고리즘' 카테고리의 다른 글
[알고리즘/파이썬] 프로그래머스 - 이중우선순위큐 (1) | 2024.01.13 |
---|---|
[알고리즘/파이썬] 백준 2096 - 내려가기 (2) | 2024.01.13 |
[알고리즘] 프로그래머스 - k진수에서 소수 개수 구하기 (1) | 2024.01.11 |
[알고리즘] 프로그래머스 - 문자열 압축 (0) | 2024.01.11 |
[알고리즘] 백준 1987 - 알파벳 (1) | 2024.01.10 |