# 재귀 버전
class Solution(object):
def pre(self, node, count, depth):
count += 1
if node.right:
self.pre(node.right, count, depth)
if node.left:
self.pre(node.left, count, depth)
if count > depth[0]:
depth[0] = count
def maxDepth(self, root):
depth = [0]
if root:
self.pre(root, 0, depth)
return depth[0]
# iter 버전
class Solution(object):
def maxDepth(self, root):
stack = [(1, root)]
maxDepth = 0
while len(stack):
depth, node = stack.pop()
if node:
maxDepth = max(depth, maxDepth)
stack.append((depth + 1, node.left))
stack.append((depth + 1, node.right))
return maxDepth
각각의 장단점이 있다. 재귀버전은 메모리는 좀 잡아먹더라도 실행시간이 빠르고 iter은 실행시간은 재귀에 비해 좀 더 걸리지만 메모리는 O(n) 정도로 굉장히 적게 썼다.
'컴퓨터 > 코테' 카테고리의 다른 글
릿코드62 - Unique paths [dp] (0) | 2021.08.07 |
---|---|
릿코드155 - min Stack [스택] (0) | 2021.08.07 |
릿코드 2 - 두 수 더하기 (리스트) (0) | 2021.08.05 |
릿코드 20 - 괄호 짝 맞추기 (0) | 2021.08.05 |
백준 1068 - 트리 문제 (0) | 2021.08.04 |