题目
请实现一个函数按照之字形顺序从上向下打印二叉树。
即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
样例
算法
相比于上一题,这道题仅需要增加一个标志位,我这里采用是一个整数,如果是奇数则正序打印,偶数翻转。
时间复杂度 O(n)
class Solution {
public List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList();
Queue<TreeNode> q = new LinkedList();
if(root == null) return res;
q.offer(root);
int count = 0;
while(q.size() != 0){
List<Integer> list = new ArrayList();
for(int i = 0,n = q.size();i < n;i++){
TreeNode tmp = q.peek();
q.poll();
list.add(tmp.val);
if(tmp.left != null){
q.offer(tmp.left);
}
if(tmp.right != null){
q.offer(tmp.right);
}
}
count++;
if(count % 2 == 1)
res.add(list);
else{
Collections.reverse(list);
res.add(list);
}
}
return res;
}
}