본문 바로가기
알고리즘 이전/재귀, DFS, BFS, Tree, Graph

레벨 탐색(BFS)

by hoshi03 2023. 8. 15.

레벨탐색

한 단계씩 탐색하는 방법

큐를 이용해서 레벨 탐색

 

BFS 함수 안에 노드를 담을 큐를 만들고

큐에가 비어있지 않는 동안 도는 while 반복문 안에

큐의 길이만큼 for문을 돌면서

연결된 노드를 출력, for문이 끝나면 레벨을 증가시킴

 

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.add(root);
        int L=0;
        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.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);
    }
}

 

'알고리즘 이전 > 재귀, DFS, BFS, Tree, Graph' 카테고리의 다른 글

말단 노드까지의 가장 짧은 경로  (0) 2023.08.16
송아지 찾기(BFS)  (0) 2023.08.15
부분집합 구하기(DFS)  (0) 2023.08.15
이진트리순회(DFS)  (0) 2023.08.15
피보나치 수열  (0) 2023.08.14