102. 二叉树的层序遍历
102. 二叉树的层序遍历
题目链接:102. 二叉树的层序遍历
题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)。
核心思考:广度优先搜索 (BFS) 与队列
层序遍历是二叉树 广度优先搜索 (BFS) 最最经典的应用。它需要我们按照从上到下、每一层从左到右的顺序逐个处理。
- 选择数据结构:广度优先与队列 (Queue) 是绑定的,因为队列能提供先入先出 (FIFO) 的特性,完美贴合我们“一层一层按顺序吐出”的需求。在 Python 中通常使用
collections.deque高效实现。 - 分组隔离机制:虽然只是丢入队列,但题目要求按层归类包装成列表(List of Lists)。为此,我们可以在
while q:循环体内部,再次嵌套一个for _ in range(len(q)):- 因为在这一瞬间,队列里的元素数量
len(q)恰恰就是当前这一层的所有节点数。 - 只要把它们批量弹干净,并在弹出的同时把它们的左右子节点压入队尾,就能完美划清每一层之间的界限!
- 因为在这一瞬间,队列里的元素数量
解题思路 (Python)
1 | # Definition for a binary tree node. |
复杂度分析
- 时间复杂度:O(N),其中 N 是二叉树的节点的数量。对于每一个节点,我们只做一次进队列和一次出队列的操作,时间开销严格与节点总数成正比。
- 空间复杂度:O(N)。在最坏情况下(比如完全二叉树的最后一层),队列中会同时存在整个树的大约一半的节点,所占用的连续最大空间量级为 O(N)。