본문 바로가기

알고리즘/인프런

섹션 7. Recursive, Tree, Graph(DFS, BFS 기초) 7. 이진트리 레벨탐색(BFS : Breadth-First Search)

문제

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

입력

  • 생략

출력

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

입출력 예제

  • 생략

풀이방식

이번 문제는 이진트리, 큐, 재귀함수를(을) 사용하여 푸는 문제이다.


 

더 자세한 설명은 아래 글을 참조해서 확인해보기 바랍니다.

섹션 7. Recursive, Tree, Graph(DFS, BFS 기초) 6. 부분집합 구하기(DFS)


설계과정

1. 큐에 노드들을 저장한다.

2. 트리에 레벨을 설정하여 각 레벨에 해당하는 노드들을 확인한다.

3. 해당 레벨에 해당하는 모든 노드들을 큐에서 꺼내고 출력한다.


풀이과정

1. NodeTwo 클래스를 생성하고, 각 변수들을 선언 및 초기화한다.

  • data : 각 트리의 값이 들어갈 변수이다.
  • lt, rt : 각각 왼쪽과 오른쪽 노드의 값을 저장할 변수이다.
  • ch[ ]  : 부분집합의 사용여부 값을 저장할 배열이다.

2. BFS 메소드를 작성한다.

  • BFS란 너비 우선 탐색으로 루트 혹은 임의의 다른 노드에서 시작하여 인접한 노드를 먼저 탐색하는 방법이다.

3. Q를 선언하고 root를 저장한다.

  • 메인에서 선언하는 값을 Q에 저장한다는 의미이다.

4. 레벨을 저장하는 변수를 선언한다.

 

5. Q가 비어있지 않으면 계속해서 도는 while 문을 선언한다.

 

6. Q의 크기를 저장하는 변수 len을 선언한다.

  • len은 Q의 크기 즉, 각 레벨에 해당하는 노드의 개수를 의미한다.

7. for문을 통해 루트 노드와 그 자식 노드들의 값을 출력한다.

  • 1회차  for문에서 cur.data 의 값은 루트 노드의 값으로, 1을 의미한다.

8. for 문이 끝나면 L을 증가시켜 다음 레벨을 탐색하고 동일하게 레벨에 맞는 노드들을 출력한다.


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.