一、题目
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
二、实现
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/ public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
// write code here
ArrayList<ArrayList<Integer>> res = new ArrayList<>(); //结果集
Queue<TreeNode> que = new LinkedList<>(); //队列
if(root != null) //根节点入队
que.add(root);
while(!que.isEmpty()){
// 存储当前层的节点
ArrayList<Integer> list = new ArrayList<>();
// 遍历当前层节点(按照层次遍历顺序进队,访问时按照奇偶层决定头插还是尾插)
for(int i=que.size();i>0;i--){ //注意:先获取当前队列的长度
// 1. 出队访问
TreeNode node = que.poll();
// res.size()+1 表示当前层数(从1开始)。
if((res.size()+1)%2 == 0){ //偶数层 从右向左(头插)
list.add(0,node.val);
}else{//奇数层 从左向右(尾插)
list.add(node.val);
}
// 2. 孩子节点进队
if(node.left != null) que.add(node.left);
if(node.right != null) que.add(node.right);
}
res.add(list);
}
return res;
}
}