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; } }