반응형
250x250
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 #이진트리 #파이썬 #리트코드
- dfs #python #leetcode #combination
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- dfs #leetcode #python
- dfs #bfs #leetcode #python
- 리트코드 #팰린드롬 #파이썬
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- 2004 #조합 0의 개수 #백준
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- python #백준 #9375 #패션왕 #신해빈
- leetcode #subsets #dfs #itertools #python
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- gcd #최대공약수 #백준 #2981 #검문
- 파이썬 #zip
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- final #java #자바 #안드로이드
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- 아스테리스크 #Asterisk #파이썬
- Python #leetcode #dfs #그래프 #백트래킹
- 코틀린 #Do it #깡샘 #안드로이드
- dfs #그래프 #graph #python #leetcode #course #schedule
- leetcode #python #dfs #재귀
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- dfs #python #leetcode
- dfs #leetcode #python #graph #그래프
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
Archives
- Today
- Total
멋진 개발자가 되고 싶다
[LeetCode/Python] 104. 이진 트리의 최대 깊이(Maximum Depth of Binary Tree) 본문
Algorithm Study/leetcode
[LeetCode/Python] 104. 이진 트리의 최대 깊이(Maximum Depth of Binary Tree)
오패산개구리 2021. 8. 7. 15:26728x90
반응형
이진 트리의 최대 깊이를 구하라.
example:
Input: root = [3,9,20, null, null,15,7]
Output: 3
1. 내가 푼 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
result = []
def dfs(tree, i):
if tree.left:
dfs(tree.left, i + 1)
if tree.right:
dfs(tree.right, i + 1)
if tree.left is None and tree.right is None:
result.append(i)
print(i)
return
if root is None:
result.append(0)
else:
dfs(root, 1)
return max(result)
|
cs |
해설:
트리의 깊이를 구하는 문제라서
dfs로 구현하였고 인자로 i(길이)를 넘겨주었다.
노드에서 더 이상 left나 right가 존재하지 않으면
result에 i를 추가하고 종료하도록 했고
root로 아무것도 주어지지 않을 것을 대비하여
line 19~20 코드를 추가하였다.
2. 반복 구조로 BFS 풀이
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
|
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
if root is None:
return 0
queue = collections.deque([root])
print(len(queue))
depth = 0
while queue:
depth += 1
# 큐 연산 추출 노드의 자식 노드 삽입
for _ in range(len(queue)):
cur_root = queue.popleft()
print(cur_root)
if cur_root.left:
queue.append(cur_root.left)
if cur_root.right:
queue.append(cur_root.right)
# BFS 반복 횟수 == 깊이
return depth
|
cs |
해설:
BFS로 구현하였다.
BFS의 경우 앵간해선 deque로 구현하는 것이 좋다.
왜냐하면 양방향 추출이 빈번할 경우 리스트보다 실행 속도가 빠르기 때문!
따라서 반복문 안에서 레벨 0, 레벨 1, 레벨 2... 순서대로 진행된다.
따라서 반복문이 끝날 때의 depth는 결국 트리의 깊이가 된다.
728x90
반응형
'Algorithm Study > leetcode' 카테고리의 다른 글
[LeetCode/Python] 687.가장 긴 동일 값의 경로(Longest Univalue Path) (0) | 2021.08.07 |
---|---|
[LeetCode/Python] 543.이진 트리의 직경(Diameter of Binary Tree) (0) | 2021.08.07 |
[LeetCode/Python] 787. Cheapest Flights Within K Stops (0) | 2021.08.01 |
[LeetCode/Python] 743. 네트워크 딜레이 타임(Network Delay Time) (feat.다익스트라 알고리즘) (0) | 2021.07.29 |
[LeetCode/Python] 207. 코스 스케줄(Course Schedule) (0) | 2021.07.29 |