//解题思路:其实就是二叉树的层级遍历,不过是在遍历的时候,需要将偶数层的节点逆序。 //关键点:每次只处理上次在queue中剩余的节点,这是上一层的所有节点。 // 处理完后刚好将下一层的所有节点(包含null)又全部放了进去。 public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer> > result=new ArrayList<>(); if(pRoot==null){ return result; } Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.offer(pRoot); boolean reverse=false; while(!queue.isEmpty()){ int size=queue.size(); ArrayList<Integer> list=new ArrayList<>(); for(int i=0;i<size;i++){ TreeNode node=queue.poll(); if(node==null){ continue; } if(!reverse){ list.add(node.val); }else{ list.add(0,node.val);//每次加到0的位置,就自动逆序了 } queue.offer(node.left); queue.offer(node.right); } if(list.size()>0){ result.add(list); } reverse=!reverse; } return result; }