BFS를 활용한 알고리즘 문제풀이
입출력
- 입력: 포화 이진 트리가 주어집니다.
- 출력: 홀수 레벨의 노드들의 값을 반대로 할당한 포화 이진 트리를 반환합니다.
예제 코드
import java.util.*;
class Solution {
public TreeNode reverseOddLevels(TreeNode root) {
int level = 0;
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while (!q.isEmpty()) {
System.out.println("level = " + level);
int size = q.size();
if (level % 2 != 0) {
List<Integer> vals = new ArrayList<>();
for (TreeNode t : q) vals.add(t.val);
Collections.reverse(vals);
int idx = 0;
for (TreeNode tn : q) tn.val = vals.get(idx++);
}
for (int i = 0; i < size; i++) {
TreeNode tn = q.poll();
if (tn.left != null) q.offer(tn.left);
if (tn.right != null) q.offer(tn.right);
}
level++;
}
return root;
}
}
- BFS를 활용하여 포화 이진 트리를 레벨별로 탐색합니다.
- 레벨별로 탐색이 끝날 경우 int level을 증가시킵니다.
- 홀수 레벨일 경우 Queue에 있는 모든 노드의 val을 순서대로 list에 저장합니다.
- 그 후 Collections.reverse()를 활용하여 역순으로 정렬한 후 각 노드에 값을 할당합니다.
회고
- 뭔가 Runtime도 메모리 사용도 제 코드는 아쉽네요...
- 다른 분들의 코드를 보면서 고민해봐야할 것 같습니다.