문제
[Symmetric Tree]
풀이
- 같은 레벨에 있는 트리의 노드가 대칭인지 판별하는 문제
- 같은 레벨 노드를 검사해야하기 때문에 bfs가 적합함
- while문에서 검사 노드 두 개 (left, right라 칭함)를 꺼내서 검사하고 대칭으로 add 해주면 됨
코드
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
queue.add(root);
while(!queue.isEmpty()){
TreeNode left = queue.poll();
TreeNode right = queue.poll();
if (left == null && right == null) continue;
if (left == null || right == null || left.val != right.val) return false;
queue.add(left.left);
queue.add(right.right);
queue.add(left.right);
queue.add(right.left);
}
return true;
}
}
정리
- 이진탐색 문제인데 이진탐색으로 어떻게 풀지 감이 안 잡혀서 걍 bfs로 품
- left, right 둘 다 null일 경우 false를 했다가 좀 헤맸음. 둘 다 null이라는 건 대칭이니까 continue해야 함을 알아차리는데 오래 걸렸다