请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode) (leetcode-cn.com)
//利用队列先进先出的特性,一层一层的把节点加到队列中,
//每次遍历都先把之前存储在队列里的节点的值放到list里,顺序与当前的层数有关,(此时不取出节点)
//然后依次取出节点,把它的左右子节点加入队列
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null){
return new ArrayList(0);
}
List<List<Integer>> res = new ArrayList();
LinkedList<TreeNode> queue = new LinkedList();
queue.add(root);
TreeNode node;
int size;
while(queue.size() != 0){
List<Integer> list = new ArrayList();
size = queue.size();
if(res.size() % 2 == 0){
for(int i = 0; i < size; i++){
list.add(queue.get(i).val);
}
}else{
for(int i = size - 1; i >= 0; i--){
list.add(queue.get(i).val);
}
}
res.add(list);
for(int i = 0; i < size; i++){
node = queue.removeFirst();
if(node.left != null){
queue.addLast(node.left);
}
if(node.right != null){
queue.addLast(node.right);
}
}
}
return res;
}
}