[Quetion]
- 이진 트리의 깊이를 구하는 문제
깊이를 구하기 위해서는 깊이 우선 탐색(DFS) 방법으로 접근이 필요하다.
DFS는 전위, 중위, 후위 방식이 있는데 이번에는 전위순회 방식을 활용했다.
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
depth=0
result=[]
self.preorder(root, depth, result)
# depth가 담긴 리스트의 중복 제거와 정렬
result=sorted(set(result))
return result[-1]
# 전위순회
def preorder(self, root, depth, result):
if root is None:
result.append(depth)
pass
else:
depth+=1
self.preorder(root.left, depth, result)
self.preorder(root.right, depth, result)
Runtime: 37ms | Memory: 18.6MB
LeetCode 코드 중 Runtime 96%, Memory 74% 해당하는 결과
N=트리 노드의 수
라고 할 때 전위순회 과정에서 O(N), 중복제거와 정렬과정에서 O(NlogN)이므로 O(N + NlogN) = O(NlogN)을 가진다.# 수정된 코드
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
if root is None:
return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right))+1
Runtime: 37ms ---> 43ms
Memory: 18.6MB ---> 18.5MB
성능상으로는 기존 코드와 크게 차이는 없는 코드이다. 하지만 코드가 훨씬 간결해졌고 Memory를 조금 더 개선할 수 있었다.
이번 문제를 해결하면서 느낀점은 아직 재귀가 익숙하지 않아서 그런지 탐색을 구현하는데 있어서 어려움이 있는 것 같다. 문제를 풀며 익숙해질 수 있도록 더 노력해야겠다 :D