codeTop100题(12)102. 二叉树的层序遍历

100 阅读1分钟

1. 原题

102. 二叉树的层序遍历

2. 分析

如果是直接要求从左到右遍历所有的节点,那么我们直接用一个队列进行存储就行了,但是现在要求返回每一层的节点。我们可以发现一个规律,当遍历完一层之后,此时队列里节点的数量正好是下一层节点的数量,因此,当我们在下一次遍历的时候先报存下来数量n,然后只出队列n次,就是下一层的所有节点了。

3. 答案

public List<List<Integer>> levelOrder(TreeNode root) {
    if (null == root) {
        return new ArrayList<>();
    }
    Queue<TreeNode> queue = new ArrayDeque<>();
    queue.add(root);
    List<List<Integer>> lists = new ArrayList<>();
    List<Integer> list;
    while (!queue.isEmpty()) {
        list = new ArrayList<>();
        //注意这里需要先存临时变量,不能直接for,size值是会变化的
        int size = queue.size();
        for (int i = 0; i < size; i++) {
            root = queue.poll();
            list.add(root.val);
            if (null != root.left) {
                queue.add(root.left);
            }
            if (null != root.right) {
                queue.add(root.right);
            }
        }
        lists.add(list);
    }
    return lists;
}