💡 이진트리 순회(BFS: Breadth-First Search, 넓이우선탐색, 레벨탐색)

2022. 4. 24. 23:19코딩 테스트(JAVA)/인프런 문제풀이

아래 그림과 같은 이진트리를 레벨탐색 연습하세요.

 

 

 

레벨 탐색 순회 출력 : 1 2 3 4 5 6 7

 

 


 

문제 분석

BFS는 최단거리탐색에 쓰입니다.
큐를 사용합니다.

 

루트 - 레벨 0

루트에서 한 번만에 갈 수 있는 노드 - 레벨 1

루트에서 두 번만에 갈 수 있는 노드 - 레벨 2

...

 

 

레벨 0 다 탐색하고 레벨 1 다 탐색하고 레벨 2 다 탐색...

 

 

코드 구현

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){ 
    		// Node객체 저장하는 큐 선언
		Queue<Node> Q=new LinkedList<>();
		Q.add(root);
        	// L : Level
		int L=0;
        while(!Q.isEmpty()){
            // Q에 원소가 몇 개 들어가 있는가
            int len = Q.size();
            //System.out.print(L+" : ");
            for(int i=0; i<len; i++){
            	// Node형
                Node cur = Q.poll();
                // 한 레벨의 원소 출력 후 
                System.out.print(cur.data+" ");
                // 자식을 Q에 넣음, cur:현재노드, if(cur.lt!=null):말단 노드 거르기 위함
                if(cur.lt!=null) Q.add(cur.lt);
                if(cur.rt!=null) Q.add(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); 
    } 
}

 

특히 레벨을 이용해서 방문하는 방법을 잘 알아두어야 합니다.

 

'코딩 테스트(JAVA) > 인프런 문제풀이' 카테고리의 다른 글

순열 구하기  (0) 2022.05.03
중복순열  (0) 2022.05.03
💡 부분집합 구하기(DFS)  (0) 2022.04.24
피보나치 수열(재귀함수 이용)  (0) 2022.04.24
팩토리얼  (0) 2022.04.24