BFS
๐ต ThingsILearned
โ๏ธ BFS๋ QUQUE๋ก ์๋ํจ.
Queue๋ Last in First out.
โ BFS ํ์ํ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Node{
int data;
Node lt, rt;
public Node(int value){
data= value;
lt= rt= null;
}
}
class Main {
Node root;
public void BFS(Node root){
Queue<Node> Q= new LinkedList<>();
Q.offer(root);
int level=0;
while(!Q.isEmpty()){
int len= Q.size();
System.out.print(level+ ": ");
for(int i=0; i<len; i++){
Node cur= Q.poll();
System.out.print(cur.data+ " ");
if(cur.lt != null) Q.offer(cur.lt);
if(cur.rt != null) Q.offer(cur.rt);
}
level++;
System.out.println();
}
}
public static void main(String[] args) {
Main tree = new Main();
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.BFS(tree.root);
}
}
//โญ๏ธoutput:
0: 1
1: 2 3
2: 4 5 6 7
(14) BFS๋ Queue๋ก ์๋ํ๋ฏ๋ก linked list์์ฑ
๐ ์ด๋ linked list์ ์ ๋๋ฆญ ํ์
Node๋ก ์ฃผ๋ ๊ฒ ๊ธฐ์ตํ๊ธฐ
(15) ๋จผ์ root๋ฅผ Queue์ offerํ๊ณ
(16) ์ง๊ธ ์ด๋ค level์ ์๋์ง ์๋ ค์ฃผ๊ธฐ ์ํด level ๋ง๋ฆ. ์ฒซ ๋ ๋ฒจ์ 0.
(18) Queue์ ๋ชจ๋ ์์๊ฐ poll๋์ด ๋น์ฐ๊ฒ ๋๋ฉด ๋ฉ์ถ๊ธฐ
(19) Q.size()๋งํผ for๋๋ฉด์ ๊ทธ ๋ ๋ฒจ์ ์๋ ์์๋ค ์ถ๋ ฅํด์ผ ํจ
๐ Q.size() ๋งํผ ๋์์ผ ํ๋๊น Q.size()๋ฅผ ๋ํ๋ด๋ ๋ณ์ ํ์, len
(21) ํ์ฌ ๊ฐ์ฅ ์์ ์๋ node๋ฅผ pollํด์ ํ๋ฆฐํธ
(23) ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๊ธ pollํ ๋
ธ๋์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์์์ ํ์ํด์ Queue์ offer
(24, 25) ์ฃผ์ํ ์ ์ ๋
ธ๋์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์์์ด null์ด๋ฉด ์๋๋ค๋ ๊ฒ์!
์์์ด null์ด๋ฉด ๊ฐ์ฅ ๋ง๋จ ๋
ธ๋๋ผ๋ ๊ฒ์ด๋๊น ์ถ๊ฐํ ๊ฒ์ด ์์.
(27) ์ด์ ์ด level์ ๋ค ํ์ํ์ผ๋ ๋ค์ level๋ก ๋์ด๊ฐ๊ธฐ ์ํด level++
(28) ๋ณด๊ธฐ ํธํ๋ผ๊ณ ํ ์ค ๋์