https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
코드설명
넓이우선탐색(BFS)을 활용합니다.
각 레벨을 차례차례 순회하므로, BFS를 사용하면 적합합니다.
또한, 처음에는 왼쪽에서 오른쪽으로, ,다음에는 오른쪽에서 왼쪽으로, 다음에는 왼쪽에서 오른쪽으로.. 이와 같이 처리합니다.
이때, Collections의 함수인 add의 몇번쨰 인덱스에 넣을 것인지 선택할 수 있는 기능을 사용합니다.
코드
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> answer = new ArrayList<>();
Queue<TreeNode> q = new LinkedList<>();
if(root == null) return answer;
q.offer(root);
boolean isTurn = false;
while(!q.isEmpty()){
List<Integer> levelList = new ArrayList<>();
int qSize = q.size();
for(int i=0; i<qSize; i++){
TreeNode temp = q.poll();
if(isTurn == false){
levelList.add(temp.val);
}else if(isTurn == true){
levelList.add(0, temp.val);
}
if(temp.left != null) q.offer(temp.left);
if(temp.right != null) q.offer(temp.right);
}
isTurn = !isTurn;
answer.add(levelList);
}
return answer;
}
}