题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
思路:这题与普通的BFS最大的不同就是要判断奇偶层数,然后分别从左到右打印和从右到左打印,此题中我们利用双端队列的方法,在不同的层数分别从两端加入元素,实现顺序的不同
代码:
/** * 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>> levelOrder(TreeNode root) { Queue<TreeNode> queue=new LinkedList<>(); List<List<Integer>> res=new ArrayList<>(); if(root!=null) queue.add(root); while(!queue.isEmpty()) { LinkedList<Integer> tmp=new LinkedList<>(); for(int i=queue.size();i>0;i--) { TreeNode node=queue.poll(); if(res.size()%2==0) tmp.addLast(node.val); else tmp.addFirst(node.val); if(node.left!=null) queue.add(node.left); if(node.right!=null) queue.add(node.right); } res.add(tmp); } return res; } }代码疑问:
奇偶层的判断for循环的边界条件调转