剑指Offer32-Ⅱ从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

/**
 * 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队列的FIFO特性,以及其中的API方法来完成广度遍历
     Queue<TreeNode> queue=new LinkedList<>();
     //创建中转队列,通过它来存储子树
     Queue<TreeNode> temp=new LinkedList<>();
     queue.offer(root);
      List<List<Integer>> totall=new ArrayList<List<Integer>>();
      //先处理边界情况
      if(root==null) return totall;
     while(!queue.isEmpty()){
     List<Integer> part =new ArrayList<Integer>();
     while(!queue.isEmpty()){
         //取出队列queue中的树,并打印其根节点值
         TreeNode node=queue.poll();
         part.add(node.val);
         //将取出的树的左右子树存到temp队列中
         if(node.left!=null) temp.offer(node.left);
         if(node.right!=null) temp.offer(node.right);
     }
     //此时queue中的所有元素已经都取出来了,所以将temp中的所有元素复制到queue队列中,注意此时不能用queue=temp,
     //因为这样只是将queue队列指向了temp队列指向的内存地址,后面将temp清空了,那么queue也就指向空了,
     //则程序直接结束。
     queue.addAll(temp);
     temp.clear();
     totall.add(part);
     }
return totall;
    }
}
原文地址:https://www.cnblogs.com/zwwang/p/13276075.html