思路:
总体来说,思路和二叉树的层序遍历一样
只不过通过,队列和栈来解决,
在遍历的时候,奇数层入队,而偶数层入栈
队列是先入先出,栈是先入后出,所以可以很好的满足之字打印
然后遍历队或栈的元素,放在list里面
过程很简单,在遍历的时候,奇数层入队,而偶数层入栈,取出栈或队列的元素放入list中就OK了
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if(pRoot == null){
return list;
}
boolean flg = true;
Queue<TreeNode> queue = new LinkedList<>();
Queue<Integer> q = new LinkedList<>();
Stack<Integer> stack = new Stack<>();
queue.offer(pRoot);
while(!queue.isEmpty()){
int size = queue.size();
ArrayList<Integer> res = new ArrayList<Integer>();
while(size !=0){
TreeNode cur = queue.poll();
if(cur.left !=null){
queue.offer(cur.left);
}
if(cur.right != null){
queue.offer(cur.right);
}
if(flg == true){
q.offer(cur.val);
}else{
stack.push(cur.val);
}
size--;
}
if(!q.isEmpty()){
while(!q.isEmpty()){
res.add(q.poll());
}
flg = false;
}
if(!stack.empty()){
while(!stack.empty()){
res.add(stack.pop());
}
flg = true;
}
list.add(res);
}
return list;
}
}