2023. 11. 23. 11:22ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1258
-> ์ด์ ๋ฌธ์ ํ์ด
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
์ด์งํธ๋ฆฌ ์ํ 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๋ฌธ์ ์ข ๋ฃํ๊ณ ๋ง๋ฌด๋ฆฌ๋๋ค.