1. BFS
def depth(tree,root):
queue = deque()
queue.append((root,1))
visit = []
count = 1
while queue: #while문을 돌리는 만큼 깊이 증가
v, count= queue.popleft()
visit.append(v)
for node in tree[v]:
if node != '.' and node not in visit:
queue.append((node,count+1))
return count
각 노드에서의 count를 계속 늘려주고 while문을 빠져나왔을 때 마지막 count를 리턴하면 최대 깊이를 구할 수 있다.
2. 재귀
def depth(tree,root):
if root =='.':
return 0
left = depth(tree,tree[root][0])
right = depth(tree,tree[root][1])
return max(left,right)+1
재귀를 통해 리프노드에서부터 위로 올라가면서 1씩 증가 시키는 방식이다.
루트까지 오면 최대 깊이를 구할 수 있다.
재귀를 통해 다른 응용문제들도 쉽게 풀 수 있으므로 꼭 기억해놓아야 할 것 같다.
'ALGORITHM' 카테고리의 다른 글
위상정렬 (0) | 2021.05.20 |
---|---|
크루스칼 / 프림 / 다익스트라 (0) | 2021.01.14 |
[BFS] 백준 2178 문제풀이 (0) | 2020.10.26 |
[DFS/BFS] 백준 1260 문제풀이 (0) | 2020.10.26 |
[이진탐색] programmers 입국 심사 문제 풀이 (0) | 2020.10.11 |