๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[DFS] 9. Tree ๋ง๋‹จ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 4.

*์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ์‚ฌ์‹ค์ƒ 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));

    }
}

 

์˜ค๋Š˜๋„ ๋ฐฐ์›Œ๊ฐ„๋‹ค!

๋Œ“๊ธ€