Algorithm
LeetCode
최대깊이

Maximum Deptgh of BinaryTree

문제 (opens in a new tab)

문제 간단 설명

이진 트리가 주어질 때 가장 깊은 곳의 Depth를 구하라

Level Order 풀이

접근 방법을 생각할 때 Level Order로 풀었을 경우, while문에서 어떻게 max_node를 구해야하지? 하는 생각이 들었다. 모든 노드에 접근할 때마다 depth를 올려주면 안되기 때문이다. 여기에서 tuple을 이용해서 cur_node에 따른 cur_depth를 구해주는 스킬을 배웠다.

class Solution :
  def maxDepth(self, root:TreeNode) -> int:
    max_depth = 0
    if root is None : 
      return max_depth
    
    max_depth = 1
    q = deque()
    q.append((root, max_depth))
    
    while q : 
      cur_node, cur_depth = q.popleft()
      max_depth = max(max_depth, cur_depth)
      
      if cur_node.left :
        q.append((cur_node.left, cur_depth + 1))
        
      if cur_node.right :
        q.append((cur_node.right, cur_depth + 1))
      
    return max_depth
    
print(Solution().maxDepth(cur_node)) 

Post Order 풀이

class Solution :
  def maxDepth(self, cur_node:TreeNode) -> int:
    max_depth = 0
    if cur_node is None : 
      return max_depth
    
    left = self.maxDepth(cur_node.left)
    right = self.maxDepth(cur_node.right)
    
    return max(left, right) + 1