์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : Tree ๋ง๋‹จ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ (DFS)

2023. 11. 27. 14:08ใ†์ธํ”„๋Ÿฐ/์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„

728x90

 

 

https://hyejin.tistory.com/1260

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์†ก์•„์ง€ ์ฐพ๊ธฐ 1 (BFS : Breadth-Firs

https://hyejin.tistory.com/1259 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ (BFS : Breadth-Fir https://hyejin.tistory.com/1258 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree

hyejin.tistory.com

-> ์ด์ „ ๋ฌธ์ œ ํ’€์ด 

 

 

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

 

์„ค๋ช…

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ด์ง„ํŠธ๋ฆฌ์—์„œ ๋ฃจํŠธ ๋…ธ๋“œ 1์—์„œ ๋ง๋‹จ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ธธ์ด ์ค‘

๊ฐ€์žฅ ์งง์€ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

๊ฐ ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋Š” ๋ฃจํŠธ๋…ธ๋“œ์—์„œ ๋ง๋‹จ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€๋Š”๋ฐ ์ด๋™ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ฆ‰ ๊ฐ„์„ (์—์ง€)์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ธธ์ด๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

์ถœ๋ ฅ 

๊ฐ€์žฅ ์งง์€ ๊ธธ์ด๋Š” 3๋ฒˆ ๋…ธ๋Š๊นŒ์ง€์˜ ๊ธธ์ด์ธ 1์ด๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด  1

public class ShortestLengthToEndNode2
{
   Node root;
   
   public int DFS(int L, Node root)
   {
      if (root.lt == null && root.rt == null) { // ๋ง๋‹จ node์ด๋ผ๋ฉด ?
         return L;
      }else
      {
         return Math.min(DFS(L + 1, root.lt), DFS(L + 1, root.rt)); // ์ž์‹ node๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ์—๋Ÿฌ๋‚œ๋‹ค.
      }
   }
   public static void main(String[] args)
   {
      ShortestLengthToEndNode2 tree = new ShortestLengthToEndNode2();
      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);
      
      int result = tree.DFS(0, tree.root);
      System.out.println(result);
   }
}

๐Ÿ‘พ : ๋…ธ๋“œ ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋‚˜์˜ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— class Node ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋Š” ์ƒ๋žตํ–ˆ๋‹ค. (์ด์ „ ๋ฌธ์ œ ํ’€์ด์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Œ) 

๊ทธ๋ฆฌ๊ณ  ๋…ธ๋“œ์˜ ์งง์€ ๊ฑฐ๋ฆฌ๊ตฌํ•˜๊ธฐ ~ ๋ญ ์ด๋Ÿฐ์‹์˜ ๋ฌธ์ œ๋Š” DFS๋ณด๋‹ค BFS๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด DFS๋กœ ํ’€ ๊ฒฝ์šฐ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ํ•œ์ชฝ๋งŒ ์žˆ๊ฑฐ๋‚˜ ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

์•„๋ฌดํŠผ.. ์ง€๊ธˆ์€ ๋ฐฐ์šฐ๋Š” ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— DFS๋กœ๋„ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค. 

๋จผ์ € ๊ทธ๋ฆผ๊ณผ ๋™์ผํ•˜๊ฒŒ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , DFS ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์ด๋•Œ root node์™€ ๋ ˆ๋ฒจ (๊ฐ„์„  ๊ธธ์ด)๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. 

 

 

public int DFS(int L, Node root)
{
   if (root.lt == null && root.rt == null) { // ๋ง๋‹จ node์ด๋ผ๋ฉด ?
      return L;
   }else
   {
      return Math.min(DFS(L + 1, root.lt), DFS(L + 1, root.rt)); // ์ž์‹ node๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ์—๋Ÿฌ๋‚œ๋‹ค.
   }
}

 

๊ทธ๋ฆฌ๊ณ  DFS ์—์„œ root ์˜ lt์™€ rt๊ฐ€ null ์ด๋ฉด ๋ง๋‹จ ๋…ธ๋“œ๋ผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ L ๊ฐ’์„ ๋„˜๊ฒจ์ค€๋‹ค. 

๋ง๋‹จ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ L +1 ํ•ด์„œ lt์™€ rt ๊ฐ’์„ ๊ฐ๊ฐ ๋„˜๊ฒจ์ฃผ๊ณ , ๋ฆฌํ„ด ๋ฐ›์€ L ๊ฐ’ ์ค‘ Math.min ๊ฐ’์„ ๊ตฌํ•ด์„œ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

 

๋ง๋กœ ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด DFS(1) ์€ ๋ง๋‹จ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— DFS(๊ธธ์ด 1, ๋…ธ๋“œ 2) ์™€ DFS(๊ธธ์ด 2, ๋…ธ๋“œ 3)์„ ํ˜ธ์ถœํ•  ๊ฒƒ์ด๋‹ค. 

 

๋จผ์ € ์Šคํƒ์— ์Œ“์ธ DFS(๊ธธ์ด 1, ๋…ธ๋“œ 2)๋„ ์—ญ์‹œ ๋ง๋‹จ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— DFS(๊ธธ์ด 2, ๋…ธ๋“œ 4), DFS(๊ธธ์ด 2, ๋…ธ๋“œ 5) ์„ ํ˜ธ์ถœํ•œ๋‹ค. 

์ด์ œ DFS(๊ธธ์ด 2, ๋…ธ๋“œ 4)์™€ DFS(๊ธธ์ด 2, ๋…ธ๋“œ 5)๋Š” ๋ง๋‹จ ๋…ธ๋“œ ์ด๊ธฐ ๋•Œ๋ฌธ์— L ์ธ 2๋ฅผ ๊ฐ๊ฐ ๋ฆฌํ„ดํ•˜๊ณ  DFS(๊ธธ์ด 1, ๋…ธ๋“œ 2)๋กœ ๋Œ์•„์˜ค๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ Math.min์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ 4์™€ ๋…ธ๋“œ 5์˜ ๊ธธ์ด ์ค‘ ์ž‘์€ ๊ฐ’์€ 2์ด๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์Šคํƒ์— ์Œ“์˜€๋˜ DFS(๊ธธ์ด 1, ๋…ธ๋“œ 3)์—์„œ๋Š” ๋ง๋‹จ ๋…ธ๋“œ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ L ๊ฐ’ 1์„ ๋ฆฌํ„ดํ•˜๊ณ , ์ด์ œ DFS(๊ธธ์ด 0, ๋…ธ๋“œ 1)๋กœ ๋Œ์•„๊ฐ„๋‹ค. 

๊ทธ๋Ÿผ DFS(๊ธธ์ด 0, ๋…ธ๋“œ 1) ๋กœ ๋Œ์•„์˜ค๋Š”๋ฐ ์ด์ œ Math.min(node(2), node(3)) ์— ๋Œ€ํ•œ ๊ธธ์ด ์ค‘ ์ตœ์†Œ ๊ฐ’์€ 1์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ 1์„ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'์ธํ”„๋Ÿฐ > ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๊ฒฝ๋กœ ํƒ์ƒ‰ (์ธ์ ‘ํ–‰๋ ฌ) DFS  (0) 2023.11.28
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : Tree ๋ง๋‹จ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ (BFS)  (0) 2023.11.27
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์†ก์•„์ง€ ์ฐพ๊ธฐ 1 (BFS : Breadth-First Search)  (1) 2023.11.24
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ (BFS : Breadth-First Search)  (0) 2023.11.23
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ (DFS)  (1) 2023.11.22