题目
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路
和层次打印一样 存入队列 取出到list里
不同的是需要判断奇数行还是偶数行
给一个变量odd = true
一次循环结束时 将变量转换
odd = !odd
倒叙打印用 add(index,node)
将数据插入index 之后依次向后移
代码
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<ArrayList<Integer> > result = new ArrayList<>();
boolean odd = true;
queue.offer(pRoot);
while(!queue.isEmpty()){
//每次循环都是一个新的list
int size = queue.size();
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i<size; i++){
TreeNode node = queue.poll();
//遇到空节点 跳过
if(node == null) continue;
if(odd){
list.add(node.val);
}else{
list.add(0,node.val);
}
queue.offer(node.left);
queue.offer(node.right);
}
if(list.size() != 0) result.add(list);
odd = ! odd;
}
return result;
}
}