leetcode

Leet code 104 - Maximum Depth of Binary Tree

monsangter 2023. 5. 16. 11:07


 

첫번째 트리 문제이다.. 처음에는 input이 리스트로 주어지는 줄 알고, 리스트에 null까지 있겠다그냥 단순히 원소 갯수 몇개인지 재귀적으로 나눠주고 +1을 하려햇으나 문제를 잘읽어보면 제일 binary tree node클래스에 대해 정의가 되어 있다.

 

 

 

1. dfs를 이용한 풀이

 

# 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:

        '''
        널도 값으로 가지고 있으니까
        결국 원소의 개수가중요하지 않을까?
        2로나눠지는 몫 + 1
        '''
        if root is None: 
            return 0 
        else: 
            left_height = self.maxDepth(root.left) 
            right_height = self.maxDepth(root.right) 
            return max(left_height, right_height) + 1
        print(root)
        print(root.right)
        # return len(root) // 2 + 1

root가 none 이라면 0을 반환, 아닌 경우에는 left, right 에 대해 재귀적으로 ,최대 값을 구한다.


2.dfs 를 활용한 풀이

 

deque 자료형을 임포트 해 사용한다.

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

from collections import deque

class Solution:
    def maxDepth(self, root):
        if root is None:
            return 0

        queue = deque([(root, 1)])
        while queue:
            node, level = queue.popleft()
            if node.left:
                queue.append((node.left, level + 1))
            if node.right:
                queue.append((node.right, level + 1))

        return leve

deque 에는 첫번째 루트와 레벨 1 이들 어간다. 여기서 데크는 스케줄링공간으로 쓰인다.

이후 팝되고 레프트와 라이트에 대한 정보를 level +1 해서 함께 데크에 넣는다.

이러면 낮은 레벨부터 순차적으로 탐색하는 dfs 알고리즘이 만들어진다.