103. 二叉树的锯齿形层序遍历
广度优先搜索+队列
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> list = new LinkedList<>();
if (root == null){
return list;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
/**
* 在《107. 二叉树的层序遍历II》的基础上,添加一个标志位来判断当前层是正向打印还是反向打印
*/
boolean flag= true;
while (!queue.isEmpty()){
/**
* LinkedList实现的集合,可以在头部插入元素
*/
LinkedList<Integer> tempList = new LinkedList<>();
int sameLevelNum = queue.size();
for (int j = 0; j < sameLevelNum; j++) {
TreeNode node = queue.poll();
if (flag) {
tempList.add(node.val);
}
else {
tempList.add(0, node.val);
}
if (node.left != null){
queue.add(node.left);
}
if (node.right != null){
queue.add(node.right);
}
}
flag = !flag;
list.add(tempList);
}
return list;
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(n)
*/
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/