题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:这个很像二叉树的BFS遍历,只不过每一层的遍历结果可能需要反转。
import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer>> list=new ArrayList<>();
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
Deque<TreeNode> deque=new LinkedList<>();
if(pRoot!=null)deque.add(pRoot);
BFS(deque,0);
return list;
}
//一种伪BFS实现方式
public void BFS(Deque<TreeNode> deque,int layer){ //layer表示层,从0开始,奇数时逆序
//当前队列大小
int size=deque.size();
if(size==0)return;
int[] arr=new int[size]; //存放本层节点值
for(int i=0;i<size;i++){
TreeNode temp=deque.pollFirst(); //取队首元素
if(layer%2==1)arr[size-1-i]=temp.val; //奇数逆序存储
else arr[i]=temp.val;
if(temp.left!=null)deque.add(temp.left); //加入左子树
if(temp.right!=null)deque.add(temp.right);
}
//本层完毕
ArrayList<Integer> array=new ArrayList<>();
for(int i: arr)array.add(i);
list.add(array);
//下一层
BFS(deque,layer+1);
}
}