leetcode 剑指offer 从上到下打印二叉树 Ⅲ
解题思路:这道题我们可以按照层序遍历的思路做,但是需要注意的是每一层的遍历顺序有所不同,通过观察,假设根结点在第0层,我们可以知道当为奇数层时,是从右往左遍历;偶数层时,是从左往右遍历。
那么我们不妨使用BFS+双端队列的方法进行编程。当为偶数层,我们使用addLast将元素添加到队列尾部;奇数层时,用addFirst将元素添加到队列头部。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> res = new ArrayList<>();
if(root == null){
return res;
}
queue.offer(root);
while(!queue.isEmpty()){
LinkedList<Integer> list = new LinkedList<>();
int size = queue.size();
for(int i = 0;i<size;i++){
TreeNode tmp = queue.poll();
if(res.size()%2 == 0){
list.addLast(tmp.val);
}else{
list.addFirst(tmp.val);
}
if(tmp.left!=null)queue.offer(tmp.left);
if(tmp.right!=null)queue.offer(tmp.right);
}
res.add(list);
}
return res;
}
}