acwing 45. 之字形打印二叉树
原题链接
请实现一个函数按照之字形顺序从上向下打印二叉树。
即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
数据范围
树中节点的数量 [0,1000]。
代码案例:
题解
就是上一道题的变形
Collections 里面也有关于数组反转的函数
这里面引入一个行数 在第单数行是从左到右
在第偶数行是从右到左
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> q = new LinkedList<>();
if(root != null) q.add(root);
int i = 1 ; //第几层 因为root结点放进队列里面了 这里面的1是第二层
while(!q.isEmpty()) {
LinkedList<Integer> level = new LinkedList<>();
// 这里采用len表示这一层的所有节点个数。也可以在每一层最后面加一个null,来标志这一层结束 addLast等函数是在LinkedList里面 如果是ArrayList
int len = q.size();
while(len -- > 0) {
TreeNode t = q.poll();
if(i % 2 == 0){
level.addFirst(t.val);
}else{
level.addLast(t.val);
}
if(t.left != null) q.add(t.left);
if(t.right != null) q.add(t.right);
}
i++;//层数加一
res.add(level);
}
return res;
}
}