二叉树

二叉树的层序遍历

中等#102Java时间 O(n)空间 O(w),w 为最大层宽

题目要做什么

按从上到下、每层从左到右的顺序返回节点值,每层独立成一个数组。

题目示例输入root = [3,9,20,null,null,15,7]
题目示例输出[[3],[9,20],[15,7]]

01 为什么这样做

队列保存待处理节点。每轮先固定队列长度,这个长度正好是当前层的节点数。新入队的孩子留到下一轮。

始终成立的条件

外层循环开始时,队列恰好包含下一层全部节点。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public List<List<Integer>> levelOrder(TreeNode root) {3        List<List<Integer>> result = new ArrayList<>();4        if (root == null) return result;5        Deque<TreeNode> queue = new ArrayDeque<>();6        queue.add(root);7        while (!queue.isEmpty()) {8            int size = queue.size();9            List<Integer> level = new ArrayList<>();10            for (int i = 0; i < size; i++) {11                TreeNode node = queue.remove();12                level.add(node.val);13                if (node.left != null) queue.add(node.left);14                if (node.right != null) queue.add(node.right);15            }16            result.add(level);17        }18        return result;19    }20}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索