class Solution { public List<List<Integer>> levelOrder(TreeNode root) { // 定义一个队列用于遍历 Queue<TreeNode> queue = new ArrayDeque(); // 定义一个List用于存放结果,针对每一层都是一个list List<List<Integer>> res = new ArrayList<>(); //先将根节点放到队列中,然后不断遍历队列。 queue.add(root); // 队列不为空就一直遍历 while (!queue.isEmpty()) { // 每一次的遍历都需要初始化2个东西 // 1. 当前队列的长度,也就是一层元素的数量: // 也就是本层需要循环的次数,本层有子节点的需要加入 // 2. 新的list用于存放结果 int curSize = queue.size(); List<Integer> curList = new ArrayList(); for (int i = 0; i < curSize; i++) { // 每次弹出队列的一个元素 TreeNode curNode = queue.poll(); // 先将结果放入list curList.add(curNode.val); // 检查其左右子树 if (curNode.left != null) { queue.add(curNode.left); } if (curNode.right != null) { queue.add(curNode.right); } } // 每一层结束,res加入新的结果 res.add(curList); } return res; }}