YSMull
<-- algorithm



原题链接

这道题的难点不在层次遍历,而在于怎么知道每一层有多少个结点。
答案是,每一次 while 循环时,当前队列的长度就是当前级别有多少个元素,可以用数学归纳法证明。

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        if (root == null) return Collections.emptyList();
        Queue<TreeNode> q = new LinkedList<>();
        TreeNode p = root;
        q.offer(p);
        List<List<Integer>> res = new ArrayList<>();
        while (!q.isEmpty()) {
            List<Integer> cur = new ArrayList<>();
            int levelSize = q.size();
            for (int i = 0; i < levelSize; i++) {
                p = q.poll();
                cur.add(p.val);
                if (p.left != null) q.offer(p.left);
                if (p.right != null) q.offer(p.right);
            }
            res.add(cur);
        }
        return res;
    }
}