和上一题 II 一样 https://blog.csdn.net/HUIEX/article/details/121453345
在将每一层的list存入结果集前,使用一个标记控制list存入元素的顺序即可
public List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) return new ArrayList<>();
/** 创建一个队列,用来存放下一层的结点*/
Queue<TreeNode> queue = new LinkedList<>();
/** 创建一个List,用作结果集*/
List<List<Integer>> result = new ArrayList<>();
/** 将root结点放入队列中*/
queue.add(root);
/** 创建一个标记,用来控制每层的打印顺序*/
int label = 1;
/** 开始广度搜索*/
while (!queue.isEmpty()) {
//创建list存放该层的元素
ArrayList<Integer> list = new ArrayList<>();
for (int i = queue.size() - 1; i >= 0; i--) {
//取出队列的第一个结点
TreeNode pollNode = queue.poll();
//结点值放入list中
list.add(pollNode.val);
//将下一层元素存入队列中
if (pollNode.left != null) queue.add(pollNode.left);
if (pollNode.right != null) queue.add(pollNode.right);
}
if (label % 2 != 0 ){//如果当前标记为奇数,就从左到右打印
result.add(list);
}else {//如果当前标记为偶数,就从右到左打印
ArrayList<Integer> list2 = new ArrayList<>();
for (int i = list.size() - 1; i >= 0 ;i--){
list2.add(list.get(i));
}
result.add(list2);
}
label++;//加一
}
return result;
}