Tree에서 말단노드까지의 경로(DFS)

문제

아래 그림과 같은 이진트리에서 루트 노드 1에서 말단노드까지의 길이 중 가장 짧은 길이를 구하는 프로그램을 작성하세요. 각 경로의 길이는 루트노드에서 말단노드까지 가는데 이동하는 횟수를 즉 간선(에지)의 개수를 길이로 하겠습니다.

이미지

가장 짧은 길이는 3번 노드까지의 길이인 1이다.

해결방법

  • 최단거리를 리턴해야 하므로, 재귀 돌면서 가장 작은 값을 어떻게 뽑을 것인가? 생각해야 함.
  • 재귀 돌리며 리턴 값이 어디로 가는지, 가고 나서 어떻게 다음을 실행 하는지 파악.

코드

import java.util.*;

class Node {
    int data;
    Node lt, rt;

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

public class Main {
    Node root;

    public int DFS(int L, Node root) {
        // 레벨과 루트 노드를 이용한다.
        // 양쪽 자식 노드 중 1개라도 비어있으면 레벨을 리턴한다. (말단 노드)
        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.Main tree = new Main.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));
    }
}




© 2024. Chiptune93 All rights reserved.