26.之字形打印二叉树
请实现一个函数按照之字形顺序从上向下打印二叉树。
即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
样例
输入如下图所示二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]
8
/ \
12 2
/ \
6 4
输出:[[8], [2, 12], [6, 4]]
思路
还是基于二叉树的层次遍历。即宽搜。设置一个标识位即可,用交替的true和false来标识是否从左向右打印。如果某行需要从右向左打印,只需要将这一层的打印结果逆序即可,再添加到总结果中。
class Solution {
public List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res=new ArrayList<>();
Queue<TreeNode> queue=new LinkedList<>();
if(root==null) return res;
queue.add(root);
//标识当前行是否应该从左向右打印
boolean flag=true;
while(!queue.isEmpty())
{
List<Integer> mres=new ArrayList<>();
int size=queue.size();
while(size-->0)
{
TreeNode temp=queue.poll();
if(temp==null) continue;
mres.add(temp.val);
queue.add(temp.left);
queue.add(temp.right);
}
if(!flag)
{
//API记住
Collections.reverse(mres);
}
if(mres.size()!=0) res.add(mres);
flag=!flag;
}
return res;
}
}