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

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

728x90

 

https://hyejin.tistory.com/1261

 

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

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

hyejin.tistory.com

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

 

 

 

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

์„ค๋ช…

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

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

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

 

 

 

์ถœ๋ ฅ 

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

 

 

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

public class ShortestLengthToEndNode3
{
   Node root;
   
   public int BFS(Node root)
   {
      int L = 0;
      Queue<Node> Q = new LinkedList<>();
      Q.offer(root);
      
      while (!Q.isEmpty())
      {
         int len = Q.size();
         for (int i = 0; i < len; i++)
         {
            Node cur = Q.poll();
            if (cur.lt != null) {
               Q.offer(cur.lt);
            }else {
               return L;
            }
            
            if (cur.rt != null)
            {
               Q.offer(cur.rt);
            }else {
               return L;
            }
         }
         
         L++;
      }
      
      return L;
   }
   
   public static void main(String[] args)
   {
      ShortestLengthToEndNode3 tree = new ShortestLengthToEndNode3();
      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.BFS(tree.root);
      System.out.println(result);
   }
}

 

๐Ÿ‘ฉ‍๐Ÿ’ป : ์ด์ „ ๋ฌธ์ œ์™€ ์„ค๋ช…์€ ๋™์ผํ•œ๋ฐ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ์ €๋ฒˆ ํ’€์ด๋Š” DFS ์ด๊ณ , ์ด๋ฒˆ ํ’€์ด๋Š” BFS๋กœ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

์‚ฌ์‹ค ์งง์€ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” DFS๋ณด๋‹ค๋Š” BFS๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค..!! 

 

public int BFS(Node root)
{
   int L = 0;
   Queue<Node> Q = new LinkedList<>();
   Q.offer(root);
   
   while (!Q.isEmpty())
   {
      int len = Q.size();
      for (int i = 0; i < len; i++)
      {
         Node cur = Q.poll();
         if (cur.lt != null) {
            Q.offer(cur.lt);
         }else {
            return L;
         }
         
         if (cur.rt != null)
         {
            Q.offer(cur.rt);
         }else {
            return L;
         }
      }
      
      L++;
   }
   
   return L;
}

์šฐ์„  BFS๋กœ ํ’€๊ธฐ ์œ„ํ•ด Queue๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ , ๋‹ค์Œ L์— ๋ ˆ๋ฒจ 0์„ ๋„ฃ์–ด์คฌ๋‹ค. ์ด L์ด ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜, ์ฆ‰ ๊ฑฐ๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. 

๊ทธ๋ฆฌ๊ณ  Q์— node 1์„ ๋จผ์ € ๋„ฃ์–ด์ฃผ๊ณ , while๋ฌธ์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ Q๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์„๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์ค€๋‹ค. 

 

Q์˜ size๋ฅผ ๊ตฌํ•ด์„œ for๋ฌธ์„ ๋„๋Š”๋ฐ ์ด๋•Œ Q์—์„œ ๊บผ๋‚ด์„œ ํ˜„์žฌ cur์˜ lt์™€ rt๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด Q์— offer ํ•ด์ฃผ๊ณ , null์ด๋ฉด ๋ง๋‹จ ๋…ธ๋“œ๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— L ํ˜„์žฌ ๋ ˆ๋ฒจ์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. (๊ทธ๊ฒŒ ๊ฐ€์žฅ ์งง์€ ๊ฑฐ๋ฆฌ์˜ ๋…ธ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ) 

 

for๋ฌธ์„ ๋‹ค ๋Œ์•˜๋‹ค๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ๋ง๋‹จ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ๋ฒจ์„ +1 ํ•ด์ฃผ๊ณ , ๋‹ค์‹œ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

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

public class ShortestLengthToEndNode4
{
   
   Node root;
   
   public int BFS(Node root)
   {
      Queue<Node> Q = new LinkedList<>();
      int L = 0;
      Q.offer(root);
      
      while (!Q.isEmpty())
      {
         int len = Q.size();
         for (int i = 0; i < len; i++)
         {
            Node cur = Q.poll();
            if (cur.lt == null && cur.rt == null) return L;
            if (cur.lt != null) Q.offer(cur.lt);
            if (cur.rt != null) Q.offer(cur.rt);
         }
         L++;
      }
      
      return L;
      
   }
   
   public static void main(String[] args)
   {
      ShortestLengthToEndNode4 tree = new ShortestLengthToEndNode4();
      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.BFS(tree.root);
      System.out.println(result);
      
   }
}

 

๐Ÿ‘พ : ์ด๊ฑด ๊ฐ•์‚ฌ๋‹˜ ํ’€์ด์ธ๋ฐ, ํ›จ์”ฌ ๊น”๋”ํ•˜๋‹ค. ใ…Žใ…Ž 

if (cur.lt == null && cur.rt == null) return L;

์ด ๋ถ€๋ถ„์ด ๋‹ค๋ฅธ๋ฐ ๋ง๋‹จ ๋…ธ๋“œ์ด๋ ค๋ฉด lt์™€ rt ๋ชจ๋‘ ์—†์„ ๋•Œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค ๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์ข€ ๋‹ฌ๋ž์œผ๋ฉด ํ‹€๋ ธ์„ ๊ฒƒ ๊ฐ™๋‹ค..! ์™œ๋ƒํ•˜๋ฉด lt ๊ฐ’์€ ์žˆ๊ณ  rt ๊ฐ’์€ ์—†์„ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ์ด๋Ÿด ๋•Œ ๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด๋Š” ์ด ์กฐ๊ฑด์—์„œ๋„ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ผ๊ณ  return L ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๋”ฐ๋ผ์„œ lt์™€ rt ๊ฐ€ ๋ชจ๋‘ null ์ผ ๋•Œ๋งŒ์ด ๋ง๋‹จ ๋…ธ๋“œ์ด๋ฏ€๋กœ ์ด๋Ÿด๋•Œ๋งŒ return L ํ•ด์ฃผ๊ณ ,

lt์™€ rt ์ค‘ ํ•˜๋‚˜๋ผ๋„ null ์ด๋ฉด Q์— offer ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

 

 

728x90

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

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๊ฒฝ๋กœ ํƒ์ƒ‰ (์ธ์ ‘๋ฆฌ์ŠคํŠธ) DFS  (0) 2023.11.29
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๊ฒฝ๋กœ ํƒ์ƒ‰ (์ธ์ ‘ํ–‰๋ ฌ) DFS  (0) 2023.11.28
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : Tree ๋ง๋‹จ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ (DFS)  (2) 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