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

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

728x90

 

https://hyejin.tistory.com/1256

 

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

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

hyejin.tistory.com

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

 

 

5. ์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ 

์„ค๋ช…

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์ „์œ„์ˆœํšŒ์™€ ํ›„์œ„์ˆœํšŒ๋ฅผ ์—ฐ์Šตํ•ด๋ณด์„ธ์š”.

 

 

 

์ „์œ„์ˆœ์œ„ ์ถœ๋ ฅ 

 1 2 4 5 3 6 7

 

 

์ค‘์œ„์ˆœ์œ„ ์ถœ๋ ฅ 

 4 2 5 1 6 3 7

 

 

ํ›„์œ„์ˆœ์œ„ ์ถœ๋ ฅ 

 4 5 2 6 7 3 1

 

 

๋ฌธ์ œ ํ’€์ด

public class BinaryTreeTraversal
{
   Node root;
   
   public void DFS(Node root)
   {
      if (root == null) { // ๋ง๋‹จ๊นŒ์ง€ ๊ฐ”๋‹ค๋Š” ์–˜๊ธฐ
         return;
      }else {
         System.out.print(root.data + " "); // ์ „์œ„ ์ˆœํšŒ
         DFS(root.lt);
//       System.out.print(root.data + " "); // ์ค‘์œ„ ์ˆœํšŒ
         DFS(root.rt);
//       System.out.print(root.data + " "); // ํ›„์œ„ ์ˆœํšŒ
      }
   
   }
   public static void main(String[] args)
   {
      BinaryTreeTraversal tree = new BinaryTreeTraversal();
      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);
      tree.root.rt.lt = new Node(6);
      tree.root.rt.rt = new Node(7);
      tree.DFS(tree.root);
      
   }
}

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

๐Ÿ‘พ : ํŠธ๋ฆฌ ๊ด€๋ จ ๋ฌธ์ œ๋Š” ํ’€์–ด๋ณธ ์ ์ด ์—†์–ด์„œ ์ด๋ฒˆ์—” ๊ฐ•์˜๋ฅผ ๋จผ์ € ๋“ค์–ด๋ดค๋‹ค. 

 

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

์šฐ์„  Node๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , ๊ทธ ๋‹ค์Œ data ๊ฐ€ ๋ถ€๋ชจ ๋…ธ๋“œ, lt ์ž๋Š” ์™ผ์ชฝ ์ž์‹, rt๋Š” ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ์„ค์ •ํ•  ๊ฒƒ์ด๋‹ค. 

์ƒ์„ฑ์ž์—๋Š” val ๋ฅผ ๋ฐ›์œผ๋ฉด ์šฐ์„  ๋ถ€๋ชจ ๋…ธ๋“œ์˜ data์— ๊ทธ ๊ฐ’์„ ๋„ฃ์–ด๋‘๊ณ , lt์™€ rt์—๋Š” null ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. 

 

BinaryTreeTraversal ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฑฐ๊ธฐ์— ์ „์—ญ ๋ณ€์ˆ˜๋กœ Node ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ–ˆ๋‹ค. 

 

public static void main(String[] args)
{
   BinaryTreeTraversal tree = new BinaryTreeTraversal();
   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);
   tree.root.rt.lt = new Node(6);
   tree.root.rt.rt = new Node(7);
   tree.DFS(tree.root);
   
}

๊ทธ ๋‹ค์Œ tree.root์— Node ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•ด์ค€๋‹ค. (์ œ์ผ ์ตœ์ƒ์œ„ ๋…ธ๋“œ) 

๊ทธ๋ฆฌ๊ณ  ์ด 1์˜ ๋…ธ๋“œ์—์„œ lt ์—๋Š” ์™ผ์ชฝ ๊ฐ’ Node 2๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ , ์˜ค๋ฅธ์ชฝ rt ๊ฐ’์—๋Š” Node 3์„ ์ƒ์„ฑํ•ด์ค€๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ด์–ด์„œ Node2์˜ ์™ผ์ชฝ lt ๊ฐ’์—๋Š” Node 4๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ , ์˜ค๋ฅธ์ชฝ rt ๊ฐ’์—๋Š” Node 5์„ ์ƒ์„ฑํ•ด์ค€๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ Node3์˜ ์™ผ์ชฝ lt ๊ฐ’์—๋Š” Node6์„ ์ƒ์„ฑํ•ด์ฃผ๊ณ , ์˜ค๋ฅธ์ชฝ rt ๊ฐ’์—๋Š” Node 7 ์„ ์ƒ์„ฑํ•ด์ค€๋‹ค. 

 

-> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ทธ๋ฆผ์ด ์ด๋Ÿฐ์‹์œผ๋กœ ๊ทธ๋ ค์งˆ ๊ฒƒ์ด๋‹ค. (๊ทธ๋ฆผ์€ ๊ฐ•์˜์—์„œ ์บก์ณํ–ˆ์Œ..) 

๊ทธ๋ฆฌ๊ณ  Node4, 5, 6, 7 ์—์„œ๋Š” null ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๊ณ  ์ด๋Ÿฌ๋ฉด ๋ง๋‹จ ๋ฐ์ดํ„ฐ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

    public void DFS(Node root)
   {
      if (root == null) { // ๋ง๋‹จ๊นŒ์ง€ ๊ฐ”๋‹ค๋Š” ์–˜๊ธฐ
         return;
      }else {
         System.out.print(root.data + " "); // ์ „์œ„ ์ˆœํšŒ
         DFS(root.lt);
//       System.out.print(root.data + " "); // ์ค‘์œ„ ์ˆœํšŒ
         DFS(root.rt);
//       System.out.print(root.data + " "); // ํ›„์œ„ ์ˆœํšŒ
      }
   
   }

DFS ํ•จ์ˆ˜์ธ๋ฐ ์ด๋•Œ root ๊ฐ€ null ์ด๋ผ๋Š” ๊ฑด ์ด์ œ ์ž์‹ ๋…ธ๋“œ ๋๊นŒ์ง€ ๊ฐ”๋‹จ ์–˜๊ธฐ ์ด๋ฏ€๋กœ return ํ•  ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š๊ณ  ๋๋‚œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  null ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด์ œ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๊ฒƒ์ธ๋ฐ ์ด๋ฒˆ์—๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋‘๋ฒˆ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. 

DFS(root.lt) ์™€ DFS(root.rt) ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋˜๊ณ , ์ด๋•Œ ์ถœ๋ ฅ์„ ์–ด๋””์„œ ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์ „์œ„, ์ค‘์œ„, ํ›„์œ„ ์ถœ๋ ฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

    public void DFS(Node root)
   {
      if (root == null) { // ๋ง๋‹จ๊นŒ์ง€ ๊ฐ”๋‹ค๋Š” ์–˜๊ธฐ
         return;
      }else {
         System.out.print(root.data + " "); // ์ „์œ„ ์ˆœํšŒ
         DFS(root.lt);
         DFS(root.rt);
      }
   
   }

 

-> ๋งจ ์œ„์—์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋จผ์ € root.data๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  DFS(root.lt)์™€ DFS(root.rt)๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ „์œ„ ์ˆœ์œ„๋กœ ์ถœ๋ ฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

1 2 4 5 3 6 7 

 

 

    public void DFS(Node root)
   {
      if (root == null) { // ๋ง๋‹จ๊นŒ์ง€ ๊ฐ”๋‹ค๋Š” ์–˜๊ธฐ
         return;
      }else {
         DFS(root.lt);
         System.out.print(root.data + " "); // ์ค‘์œ„ ์ˆœํšŒ
         DFS(root.rt);
      }
   
   }

-> DFS(root.lt)์™€ DFS(root.rt) ์‚ฌ์ด์— ์ถœ๋ ฅ ์ฝ”๋“œ๊ฐ€ ์œ„์น˜ํ•˜๋ฉด lt ์ถœ๋ ฅํ•˜๊ณ , root.data ์ถœ๋ ฅํ•˜๊ณ , rt๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— 

์ค‘์œ„ ์ˆœ์œ„๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

4 2 5 1 6 3 7

 

 

    public void DFS(Node root)
   {
      if (root == null) { // ๋ง๋‹จ๊นŒ์ง€ ๊ฐ”๋‹ค๋Š” ์–˜๊ธฐ
         return;
      }else {
         DFS(root.lt);
         DFS(root.rt);
         System.out.print(root.data + " "); // ํ›„์œ„ ์ˆœํšŒ
      }
   
   }

 

-> ๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•˜๋ฉด DFS(root.lt)์™€ DFS(root.rt) ๋ชจ๋‘ ์ถœ๋ ฅํ•œ ํ›„์— root.data ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›„์œ„ ์ˆœ์œ„๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

4 5 2 6 7 3 1 

 

 

728x90