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

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

728x90

 

https://hyejin.tistory.com/1258

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ (DFS)

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

hyejin.tistory.com

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

 

 

7. ์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ (BFS : Breadth-First Search) 

์„ค๋ช…

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๋ ˆ๋ฒจํƒ์ƒ‰ ์—ฐ์Šตํ•˜์„ธ์š”.

 

 

 

์˜ˆ์‹œ ์ถœ๋ ฅ 1

0 : 1 
1 : 2 3 
2 : 4 5 6 7

 

 

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

public class BinaryTreeTraversal_width
{
   Node3 root;
   
   public void BFS(Node3 root)
   {
      Queue<Node3> Q = new LinkedList<>();
      Q.offer(root);
      int L = 0;
      while(!Q.isEmpty())
      {
         int len = Q.size(); // Queue์˜ ์›์†Œ ๊ฐœ์ˆ˜
         System.out.print(L + " : " );
         for (int i = 0; i < len; i++)
         {
            Node3 cur = Q.poll();
            System.out.print(cur.data + " ");
            if (cur.lt != null) Q.offer(cur.lt);
            if (cur.rt != null) Q.offer(cur.rt);
         }
         L++;
         System.out.println();
      }
   }
   public static void main(String[] args)
   {
      BinaryTreeTraversal_width tree = new BinaryTreeTraversal_width();
      tree.root = new Node3(1);
      tree.root.lt = new Node3(2);
      tree.root.rt = new Node3(3);
      tree.root.lt.lt = new Node3(4);
      tree.root.lt.rt = new Node3(5);
      tree.root.rt.lt = new Node3(6);
      tree.root.rt.rt = new Node3(7);
      tree.BFS(tree.root);
   }
}

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

๐Ÿ‘พ : BFS์™€ DFS ์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ๋” ํ•˜๋˜๊ฐ€ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.... ๋ญ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๋‹ˆ ๊ณ„์† ๊ฐ•์˜๋ฅผ ๋“ฃ๊ฒŒ ๋œ๋‹ค ใ…œใ…œ 

์ผ๋‹จ ์ด๋ฒˆ ๋ฌธ์ œ๋Š” 

https://hyejin.tistory.com/1257

 

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

https://hyejin.tistory.com/1256 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ํ”ผ๋ณด๋‚˜์น˜ ์žฌ๊ท€ (๋ฉ”๋ชจ์ด์ œ์ด https://hyejin.tistory.com/1255 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree,

hyejin.tistory.com

์ด์ง„ํŠธ๋ฆฌ ์ˆœํšŒ DFS๋กœ ํ’€์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ Node ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  

 

public void BFS(Node3 root)
{
   Queue<Node3> Q = new LinkedList<>();
   Q.offer(root);
   int L = 0;
   while(!Q.isEmpty())
   {
      int len = Q.size(); // Queue์˜ ์›์†Œ ๊ฐœ์ˆ˜
      System.out.print(L + " : " );
      for (int i = 0; i < len; i++)
      {
         Node3 cur = Q.poll();
         System.out.print(cur.data + " ");
         if (cur.lt != null) Q.offer(cur.lt);
         if (cur.rt != null) Q.offer(cur.rt);
      }
      L++;
      System.out.println();
   }
}

BFS ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ’€์—ˆ๋‹ค. BFS๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ๊นŠ์ด ์šฐ์„ ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. 

์ด๋ฒˆ์—๋Š” Queue๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Queue๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•ด์ค€๋‹ค. 

๊ทธ ๋‹ค์Œ Q์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ root๋ฅผ ๋จผ์ € ๋„ฃ์–ด์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ L ๋ณ€์ˆ˜์— ๋ ˆ๋ฒจ์„ 0์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  Q๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์„ ๋•Œ ๊นŒ์ง€ while๋ฌธ์„ ๋Œ๋ฉด์„œ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ 

len ๋ณ€์ˆ˜์—๋Š” Q์˜ size๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ ๋‹ค์Œ for๋ฌธ์„ len ๋งŒํผ ๋Œ๋ฉด์„œ Queue์— ๋“ค์–ด์žˆ๋Š” ์›์†Œ๋ฅผ ๊บผ๋‚ด์„œ ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ ํ˜„์žฌ node์ธ cur์˜ lt rt ๊ฐ€ null ์ด ์•„๋‹ˆ๋ฉด ๊ฐ๊ฐ Queue์— ๋„ฃ์–ด์ฃผ๊ณ  ์ด๊ฑธ ๊ณ„์† ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

์ฒœ์ฒœํžˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด 

์šฐ์„  ๋งจ ์ฒ˜์Œ์— Node(1) ์„ Queue์— ๋„ฃ์–ด์ฃผ๊ณ , L์€ 0์ด๋‹ค. 

Queue์— ๋น„์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— while ๋ฐ˜๋ณต๋ฌธ์„ ๋„๋Š”๋ฐ ์ด๋•Œ Queue์˜ size๋Š” 1์ด๋‹ค. 

๊ทธ๋Ÿฌ๋ฏ€๋กœ for๋ฌธ์€ 0๋ถ€ํ„ฐ 1๊นŒ์ง€ ์ฆ‰, ํ•œ๋ฒˆ ๋Œ๊ณ  ์ด๋•Œ Queue์— ์žˆ๋˜ Node(1)์„ ๊บผ๋‚ด์„œ ๊ทธ ๋…ธ๋“œ์— data๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. -> 1 ์ถœ๋ ฅ 

๊ทธ ๋‹ค์Œ ์ด Node(1)์˜ lt์™€ rt ๊ฐ€ ๊ฐ๊ฐ null ์ด ์•„๋‹ˆ๋ผ๋ฉด Queue์— lt, rt Node๋ฅผ offer ํ•ด์ค€๋‹ค. 

๊ทธ๋Ÿฌ๋ฉด ๋ ˆ๋ฒจ 0์— ์žˆ๋˜ Node๋Š” ๋ชจ๋‘ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ L++๋ฅผ ํ•ด์„œ ๋ ˆ๋ฒจ1๋กœ ๋„˜์–ด๊ฐ„๋‹ค. 

 

๋ ˆ๋ฒจ 1์—๋Š” ํ˜„์žฌ Queue์— Node(2)์™€ Node(3)์ด ๋“ค์–ด์žˆ๋‹ค. 

๋”ฐ๋ผ์„œ Queue๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— while๋ฌธ์„ ๋Œ๊ณ , ์ด๋•Œ Queue์˜ size๋Š” 2์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ for๋ฌธ์€ 0๋ถ€ํ„ฐ 2์ „๊นŒ์ง€ ์ฆ‰, 2๋ฒˆ ๋Œ๊ณ  ๋จผ์ € Queue์— ๋“ค์–ด์žˆ๋˜ Node(2)๋ฅผ ๊บผ๋‚ด์„œ ์ด ๋…ธ๋“œ์˜ data ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. -> 2 ์ถœ๋ ฅ

๊ทธ๋ฆฌ๊ณ  Node(2)์˜ lt, rt Node ๊ฐ€ null ์ด ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— lt, rt Node๋ฅผ Queue์— offer ํ•ด์ค€๋‹ค. 

์ด์ œ ๋‹ค์Œ Node(3)์„ ๊บผ๋‚ด์„œ ์ด ๋…ธ๋“œ์˜ data ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. -> 3 ์ถœ๋ ฅ 

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Node(3)์˜ lt, rt Node๊ฐ€ null ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— lt, rt Node๋ฅผ Queue์— offer ํ•ด์ค€๋‹ค. 

๊ทธ๋Ÿฌ๋ฉด ๋ ˆ๋ฒจ 1์— ์žˆ๋˜ Node๋Š” ๋ชจ๋‘ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— L++ ํ•ด์„œ ๋ ˆ๋ฒจ2๋กœ ๋„˜์–ด๊ฐ„๋‹ค. 

 

๋ ˆ๋ฒจ 2์—๋Š” ํ˜„์žฌ Queue์— Node(4), Node(5), Node(6), Node(7)์ด ๋“ค์–ด์žˆ๋‹ค. 

๋”ฐ๋ผ์„œ Queue๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— while๋ฌธ์„ ๋Œ๊ณ , ์ด๋•Œ Queue์˜ size๋Š” 4์ด๋‹ค. 

๊ทธ๋Ÿฌ๋ฏ€๋กœ for๋ฌธ์€ 4๋ฒˆ ๋Œ๊ณ , ๋จผ์ € Queue์— ๋“ค์–ด์žˆ๋˜ Node(4) ๋ฅผ ๊บผ๋‚ด์„œ ์ด ๋…ธ๋“œ์˜ data ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. -> 4 ์ถœ๋ ฅ 

๊ทธ๋ฆฌ๊ณ  Node(4)์˜ lt, rt Node๋Š” null ์ด๊ธฐ ๋•Œ๋ฌธ์— Queue์— ๋” ์ด์ƒ offer ํ•˜์ง€ ์•Š๊ณ  ๋๋‚œ๋‹ค. 

๋‹ค์Œ Node(5)๋กœ ๋„˜์–ด์™€์„œ data ์ถœ๋ ฅํ•˜๊ณ  -> 5 ์ถœ๋ ฅ Node(4)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ lt, rt Node ๋ชจ๋‘ null ์ด๊ธฐ ๋•Œ๋ฌธ์— Queue์— offer ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ Node(6)์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.. 

์ด๋ ‡๊ฒŒ Node(6), Node(7)๋„ ๊ฐ๊ฐ ์ถœ๋ ฅ ํ›„ -> 6 7 ์ถœ๋ ฅ lt, rt Node๋Š” null ์ด๊ธฐ ๋•Œ๋ฌธ์— Queue์— offer ํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒํ•˜๋ฉฐ Queue์— ๋” ์ด์ƒ Node๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— while๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋งˆ๋ฌด๋ฆฌ๋œ๋‹ค.

 

 

 

 

 

 

728x90

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

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. 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 ๊ธฐ์ดˆ) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ (DFS)  (1) 2023.11.22
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ  (0) 2023.11.21
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ํ”ผ๋ณด๋‚˜์น˜ ์žฌ๊ท€ (๋ฉ”๋ชจ์ด์ œ์ด์…˜)  (0) 2023.11.20