回答のアプローチは Recursive DFS BFS Iterative DFS
Base case root が empty children が Null
Recursive DFS
Time complexity: O(n) Mem complexity: O(n)
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))
BFS
BFS を使う場合は Queue を使う。
3
/ \ 9 20 /\ 15 7
| 3 | 9 | 20 | 15 | 7 |
1 2 2 3 3 ← Level
| 3 |
1
Queue を deque していくと 最終的に Queue の値がなくなるので、 その時に level を返す。
if not root:
retunr 0
level = 0
q = deque([root])
while q:
for i in range(len(q)):
node = q.popleft()
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
level += 1
return level
Iterative DFS
Pre-order DFS
stack
| node depth |
| 3 1 |
pop して
| node depth |
| 20 2 |
| 9 2 |
pop して
| node depth |
| 20 2 |
20 には子がいるので、stack に追加
| node depth |
| 7 3 |
| 15 3 |
stack = [[root, 1]]
res = 0
while stack:
node, depth = stack.pop()
if node:
res = max(res, depth)
stack.append([node.left, depth + 1])
stack.append([node.right, depth + 1])
return res