题目描述:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路分析:
- 通过队列层序遍历二叉树
- 通过一个flag标记每层正着打印还是反着打印
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> res=new ArrayList<>();
Queue<TreeNode> q=new LinkedList<>();
if(pRoot==null){
return res;
}
q.offer(pRoot);
boolean flag=true;
while(!q.isEmpty()){
int size=q.size();
ArrayList<Integer> list=new ArrayList<>();
for(int i=0;i<size;i++){
TreeNode tmp=q.poll();
if(tmp==null){
continue;
}
if(flag){
list.add(tmp.val);
}else{
list.add(0,tmp.val);
}
q.offer(tmp.left);
q.offer(tmp.right);
}
if(list.size()>0){
res.add(list);
}
flag=!flag;
}
return res;
}
}