- 题目描述:
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) - 提示:
数据范围:0 ≤ n ≤ 1500,树上每个节点的val满足 ∣val∣<= 1500
要求:空间复杂度:O(n),时间复杂度:O(n) - 代码实现:
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
if(pRoot == null) return new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(pRoot);
int flag = 1;
Stack<TreeNode> stack = new Stack<>();
while(!queue.isEmpty()){
ArrayList<Integer> tmp = new ArrayList<Integer>();
int len = queue.size();
for(int i=0; i<len; i++){
pRoot = queue.poll();
tmp.add(pRoot.val);
if(flag % 2 == 1){
if(pRoot.left != null) stack.push(pRoot.left);
if(pRoot.right != null) stack.push(pRoot.right);
}else{
if(pRoot.right != null) stack.push(pRoot.right);
if(pRoot.left != null) stack.push(pRoot.left);
}
}
while(!stack.isEmpty()){
queue.offer(stack.pop());
}
result.add(tmp);
flag++;
}
return result;
}
}