Algorithm/inflearn

이진트리 레벨탐색(BFS)

마닐라 2021. 9. 29. 23:03

아래 그림과 같은 이진트리를 레벨탐색으로 출력하세요.


뺀 다음 데이터 찍고 자식들을 넣은 다음 레벨업 시켜 -> 계속 반복

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