题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路
将BFS做一点改进,sign记录用来区分奇偶行数,rol.add(0,temp.val)是倒序存储。
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
// if(pRoot == null) return result;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(pRoot);
boolean sign = true;
while(!queue.isEmpty()){
int size = queue.size();
ArrayList<Integer> rol = new ArrayList<Integer>();
for(int i = 0;i < size;i++){
TreeNode temp = queue.poll();
if(temp == null){continue;}//如果pRoot==null,程序是能执行到这里的
if(sign)
rol.add(temp.val);
else
rol.add(0,temp.val);
if(temp.left != null) queue.offer(temp.left);
if(temp.right != null) queue.offer(temp.right);
}
if(rol.size() != 0) result.add(rol);
sign = !sign;
}
return result;
}
}