Notice
Recent Posts
Recent Comments
Link
04-28 13:49
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

<<개발일지>>

[DFS] 9. Tree 말단노드까지의 가장 짧은 경로 본문

코딩테스트

[DFS] 9. Tree 말단노드까지의 가장 짧은 경로

개발하는지호 2024. 2. 4. 13:43

*최단 거리는 사실상 BFS로 푼다!!

하지만 공부하는 입장에서 BFS로 시도를 해본다.

 

<<풀이>>

우선 Node class를 만든 후 트리를 만들어준다!

 

L(Level)이 0인 곳 부터 해서 DFS를 시작한다. 이때 DFS는 Level를 반환하므로 타입은 int이다.

 

만약 lt, rt가 null이면 그 곳이 말단이기 때문에 바로 L를 반환한다. 

 

그렇지 않으면 DFS를 지속하는데 Math 내장 클래스를 활용해서 Math.min(DFS(L + 1, root.lt), DFS(L + 1, root.rt)) 를 해줌으로써 

말단 노드까지의 가장 짧은 경로를 return하게 한다.

 

*DFS 같은 경우 왼쪽에 있는 DFS가 먼저 다 계산 된 후 오른 쪽 DFS가 계산 된다. 이를 생각하며 스택을 그려보면서 공부를 계속하자! 그러다보면 DFS의 이해도가 한 층 더 깊어질 것이다~

 

class Node {
    Node lt, rt;
    int data;
    public Node(int val) {
        data = val;
         lt = rt = null;
    }
}


class Main  {
    Node root;
    public int DFS(int L, Node root) {
        if (root.lt == null && root.rt == null) return L;
        else return Math.min(DFS(L+1, root.lt), DFS(L+1,root.rt));
    }


    public static void main(String[] args) {
        Main tree = new Main();
        tree.root = new Node(1);
        tree.root.lt = new Node(2);
        tree.root.rt = new Node(3);
        tree.root.lt.lt = new Node(4);
        tree.root.lt.rt = new Node(5);
        System.out.println(tree.DFS(0, tree.root));

    }
}

 

오늘도 배워간다!

'코딩테스트' 카테고리의 다른 글

[DFS] 12. 경로탐색  (1) 2024.02.08
[BFS] 10. 말단노드까지의 가장 짧은 경로  (1) 2024.02.06
[BFS] 8. 송아지 찾기  (0) 2024.02.04
[BFS] 7. 이진트리 레벨탐색  (0) 2024.02.02
[DFS] 6. 부분 집합 구하기  (0) 2024.02.02