1、题目
2、思路
使用双端队列的方式;对奇偶层分别使用不同的方式进行输出。
BFS 循环: 循环打印奇 / 偶数层,当 deque 为空时跳出;
1、打印奇数层: 从左向右 打印,先左后右 加入下层节点;
2、若 deque 为空,说明向下无偶数层,则跳出;
3、打印偶数层: 从右向左 打印,先右后左 加入下层节点;
3、代码
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
Deque<TreeNode> deque = new LinkedList<>();// 双端队列
ArrayList res = new ArrayList<>();
if(pRoot != null) deque.add(pRoot);
while(!deque.isEmpty()) {
// 打印奇数层
ArrayList tmp = new ArrayList<>();
for(int i = deque.size(); i > 0; i--) {
// 从左向右打印
TreeNode node = deque.removeFirst();
tmp.add(node.val);
// 先左后右加入下层节点
if(node.left != null) deque.addLast(node.left);
if(node.right != null) deque.addLast(node.right);
}
res.add(tmp);
if(deque.isEmpty()) break; // 若为空则提前跳出
// 打印偶数层
tmp = new ArrayList<>();
for(int i = deque.size(); i > 0; i--) {
// 从右向左打印
TreeNode node = deque.removeLast();
tmp.add(node.val);
// 先右后左加入下层节点
if(node.right != null) deque.addFirst(node.right);
if(node.left != null) deque.addFirst(node.left);
}
res.add(tmp);
}
return res;
}
}