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) ๋ณด๊ธฐ ํธํ๋ผ๊ณ ํ ์ค ๋์