아래 그림과 같은 이진트리를 레벨탐색으로 출력하세요.
뺀 다음 데이터 찍고 자식들을 넣은 다음 레벨업 시켜 -> 계속 반복
import java.util.*;
class Node {
int data;
Node lt, rt;
public Node(int val) {
data=val;
lt=rt=null;
}
}
public class Main {
Node root;
public void BFS(Node root) {
Queue<Node> Q = new LinkedList<>();
//루트 노드는 넣어둔다.
Q.offer(root);
int L = 0; //맨 처음 루트 노트는 0 L은 레벨
while(!Q.isEmpty()) {
int len = Q.size();
System.out.print(L + " : ");
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);
}
//레벨이 끝났으면 레벨업시켜서 자식 노드들을 탐색한다.
L++;
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);
}
}
//먼저 root의 1 값을 큐에 넣고 뺀 다음 출력한다.// 출력 0L : 1
//root와 연결된 자식들인 2,3을 큐에 넣는다.
//2를 뺀다음 출력하고 큐에 자식들인 4 5 를 넣는다. // q 3 4 5 // 1L : 2
//3을 뺀다음 출력하고 큐에 자식들인 6 7 을 넣는다. // q 4 5 6 7 // 1L : 2 3
//4를 뺀다음 출력하고 자식들이 없으니 다음으로 간다. // q 5 6 7 // 2L : 3
//5를 뺀다음 출력하고 자식들이 없으니 다음으로 간다. // q 6 7 // 2L : 3 4
//6를 뺀다음 출력하고 자식들이 없으니 다음으로 간다. // q 7 // 2L : 3 4 5
//7를 뺀다음 출력하고 자식들이 없으니 다음으로 간다. // q // 2L : 3 4 5 6
//큐가 비어있으니 while문에서 나온다.
'Algorithm > inflearn' 카테고리의 다른 글
Tree 말단노드까지의 가장 짧은 경로(DFS) (0) | 2021.09.29 |
---|---|
★송아지 찾기1(BFS) (0) | 2021.09.29 |
★부분집합 구하기(DFS) (0) | 2021.09.29 |
★이진트리순회(DFS) (0) | 2021.09.29 |
#피보나치 재귀(메모이제이션) (0) | 2021.09.29 |