最关键的是使用双端队列遍历,可以在队列的任一端插入元素。
如果需要 FIFO (先进先出)的顺序,则将新元素添加到队列尾部,后插入的元素就可以排在后面。...如果需要 FILO (先进后出)的顺序,则将新元素添加到队列首部,后插入的元素就可以排在前面。
算法
实现 BFS 的几种算法。
使用两层嵌套循环。...将元素添加到队列尾部,保证后添加的节点后被访问。从上图中可以看出,输入序列 [1, 2, 3, 4, 5],按照 FIFO 顺序得到输出序列为 [1, 2, 3, 4, 5]。...将元素添加到队列头部,保证后添加的节点先被访问。输入序列 [1, 2, 3, 4, 5],按照 FILO 顺序得到输出序列为 [5, 4, 3, 2, 1]。...List> zigzagLevelOrder(TreeNode root) {
if (root == null) {
return new ArrayList