/** * 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<>();//队列,用Queue接口的LinkedList实现,一个队列在一次循环刚开始时,只存储当前这一层的元素。每遍历一个元素,就把该元素子节点入队 List<List<Integer>> res=new ArrayList<List<Integer>>();//结果 if(root==null) return res;//根节点为空,直接返回 int leavel=0;//第几层 queue.add(root); while(!queue.isEmpty()) { res.add(new ArrayList<>()); int level_length = queue.size();//不能直接用size当成循环条件,随着出列,长度越来越小 for(int i=0;i<level_length;i++) { TreeNode cur=queue.remove();//出列 res.get(leavel).add(cur.val); if(cur.left!=null) queue.add(cur.left); if(cur.right!=null) queue.add(cur.right);//左右子节点入列,可以看出,每一次,队列里面包含的都是一行所有的元素 } leavel++; } return res; } }