102. 二叉树的层序遍历

 

 https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/er-cha-shu-de-ceng-ci-bian-li-by-leetcode/

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

  

原文地址:https://www.cnblogs.com/lzh1043060917/p/12826640.html