102. 二叉树的层序遍历


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

浙公网安备 33010602011771号