/**
* 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;
}
}