1. 二叉树层序遍历的核心思路
层序遍历(Level Order Traversal)是二叉树算法中最基础也最重要的遍历方式之一。与先序、中序、后序遍历不同,层序遍历是按照树的层级从上到下、从左到右依次访问每个节点。这种遍历方式在实际应用中非常广泛,比如打印树的结构、计算树的宽度、寻找特定层级的节点等。
1.1 为什么需要层序遍历?
想象一下你要组织一场公司年会,需要按照部门层级依次安排座位:第一排是CEO,第二排是各部门总监,第三排是经理...这种"层级式"的访问方式就是层序遍历的典型应用场景。在算法层面,层序遍历能帮助我们:
- 直观理解树的结构:按层级输出可以清晰看到树的形状
- 解决层级相关问题:如计算树的最大宽度、寻找第k层的所有节点
- 作为其他算法的基础:很多复杂算法(如序列化/反序列化二叉树)都基于层序遍历
1.2 层序遍历与BFS的关系
层序遍历本质上就是**广度优先搜索(BFS)**在二叉树上的应用。BFS是一种图遍历算法,它从起点开始,先访问所有相邻节点,再访问这些相邻节点的相邻节点,以此类推。对于二叉树这种特殊的图结构,BFS自然就形成了按层级遍历的效果。
关键理解:BFS使用队列(Queue)这种数据结构来保证"先进先出"的访问顺序,这正是实现层序遍历的关键。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 层序遍历的标准实现
2.1 基础代码实现
让我们先看标准的层序遍历实现,再逐步解析每个部分的含义:
cpp复制class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
if (root != NULL) que.push(root);
vector<vector<int>> result;
while (!que.empty()) {
int size = que.size();
vector<int> vec;
for (int i = 0; i < size; i
