늘 겸손하게

LeetCode 111 - Minimum Depth of Binary Tree ( JavaScript ) 본문

코딩 문제/LeetCode

LeetCode 111 - Minimum Depth of Binary Tree ( JavaScript )

besforyou999 2021. 11. 1. 20:09

 

안녕하세요 besforyou입니다.

 

이번 글은 리트코드 111번 문제입니다.

 


문제 설명

 

이진 트리가 주어졌을 때 최소 깊이를 구하라.

 

최소 깊이는 루트 노드로부터 가장 가까운 leaf 노드까지 갈 때 거쳐가는 노드의 개수입니다.

 


문제 풀이

깊이 우선 탐색(DFS)법으로 탐색하되 leaf 노드를 만나면 전역 변수로 선언해 높은 변수와 현재 깊이를 비교하여 현재 깊이 값이 더 작다면 변수를 교환합니다.

 


코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var minDepth = function(root) {
    
    let min = 100001;
    let dfs = function(root, depth) {
        if(!root) 
            return;
        if(!root.left && !root.right) 
            if ( min > depth ) 
                min = depth;
        dfs(root.left, depth + 1);
        dfs(root.right, depth + 1);
    }
    
    if ( root == null )
        return 0;
    
    dfs(root,1);
    return min;
};
 
 
cs

 

코드 설명

 

노드 깊이의 범위는 [0,10^5] 사이에 있으므로 변수 min에 100001 할당하여 선언해놓는다.

 

dfs로 탐색하되 dfs를 호출할때마다 depth를 1만큼 증가시켜서 노드의 깊이를 저장하도록 한다.

 

현재 노드에서 왼쪽 자식 노드와 오른쪽 자식 노드가 없다면 leaf인 것이므로 현재 깊이가 최소 깊이인지 판단한다.

 

root == null 이면 탐색 끝.

 

 

dfs(root,1); 로 탐색을 시작하고

탐색이 종료되면 min을 반환한다.

 


결과