DFS 트리 순회
DFS로 구현했다.
- 전위: 루트가 우선. 루트 - 왼쪽자식 - 오른쪽자식
- 중위: 왼쪽자식 - 루트 - 오른쪽자식
- 후위: 루트가 마지막. 왼쪽자식 - 오른쪽자식 - 루트
코드
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
32
33
def dfs_prefix(node):
if node == '.':
return
print(node, end='')
dfs_prefix(node_dict[node][0])
dfs_prefix(node_dict[node][1])
def dfs_infix(node):
if node == '.':
return
dfs_infix(node_dict[node][0])
print(node, end='')
dfs_infix(node_dict[node][1])
def dfs_postfix(node):
if node == '.':
return
dfs_postfix(node_dict[node][0])
dfs_postfix(node_dict[node][1])
print(node, end='')
N = int(input())
node_dict = {}
for _ in range(N):
a, b, c = input().split()
node_dict[a] = [b, c]
dfs_prefix('A')
print()
dfs_infix('A')
print()
dfs_postfix('A')
print()
개선 코드
함수를 한 개만 사용하도록 수정할 수 있었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
prefix = []
infix = []
postfix = []
def dfs(node):
if node == '.':
return
prefix.append(node)
dfs(node_dict[node][0])
infix.append(node)
dfs(node_dict[node][1])
postfix.append(node)
N = int(input())
node_dict = {}
for _ in range(N):
a, b, c = input().split()
node_dict[a] = [b, c]
dfs('A')
print(''.join(prefix))
print(''.join(infix))
print(''.join(postfix))
+) 갑작스런 비교
BFS와 DFS는 시간복잡도는 같지만, 공간복잡도의 경우 트리의 너비가 넓을수록 DFS가 유리하고, 깊이가 깊을수록 BFS가 유리하다…
This post is licensed under CC BY 4.0 by the author.