news 2026/8/29 9:15:04

刷题日记-------二叉树层序遍历

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
刷题日记-------二叉树层序遍历

给你二叉树的根节点root,返回其节点值的层序遍历。 (即逐层地,从左到右访问所有节点)。

示例 1:

输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]输出:[[1]]

示例 3:

输入:root = []输出:[]
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++){ TreeNode* node =que.front(); que.pop(); vec.push_back(node->val); if(node->left) que.push(node->left); if(node->right) que.push(node->right); } result.push_back(vec); } return result; } };

好,这段代码是二叉树的层序遍历(Level Order Traversal),也就是一层一层从上到下、从左到右遍历
我按「思路 → 关键数据结构 → 逐行语法讲解 → 小例子跑一遍」来给你拆,像老师板书那种 👍


一、整体思路(先别看语法)

一句话版👇

用队列(queue)保存“当前层的节点”,每次处理完这一层,再处理下一层

为什么用队列?

  • 队列:先进先出(FIFO)

  • 非常适合「先看到谁就先处理谁」→ 正好符合层序遍历


二、要用到的东西你得先认识

1️⃣queue<TreeNode*>

queue<TreeNode*> que;
  • 队列里放的是:TreeNode 指针

  • 存的是“还没处理的节点”

2️⃣vector<vector<int>> result

vector<vector<int>> result;
  • 最终结果

  • 外层vector:每一层

  • 内层vector<int>:这一层的所有节点值


三、逐行“老师式”讲解

我把代码拆开讲 👇


① 函数入口

vector<vector<int>> levelOrder(TreeNode* root)
  • root:二叉树的根节点

  • 返回值:二维数组

    • [[第一层], [第二层], [第三层]...]


② 建立队列 + 判空

queue<TreeNode*> que; if(root != NULL) que.push(root);
  • 如果树不空,把根节点放进队列

  • 这是第一层的起点

📌 如果root == NULL

  • 队列是空的

  • 下面的while直接跳过

  • 返回空结果(合理)


③ 结果容器

vector<vector<int>> result;

用来保存所有层的结果


④ 外层 while —— 一层一层来

while(!que.empty())

👉队列不空,就说明还有节点没遍历

⚠️ 重点:
一次 while 循环 = 处理一整层


⑤ 当前层有多少节点(核心语句)

int size = que.size();

🔥 非常关键的一行!

  • size=当前层节点数

  • 这一层的节点,在进入for之前就已经确定了


⑥ 存当前层的结果

vector<int> vec;
  • 用来存「这一层」的所有值


⑦ for 循环 —— 只处理当前层

for(int i = 0; i < size; i++)

为什么不是while

  • 因为:

    • size当前层固定数量

    • 即使你在循环里push了孩子节点

    • 也不会影响本层遍历


⑧ 取队头节点

TreeNode* node = que.front(); que.pop();
  • front():取最前面的节点

  • pop():从队列中移除

📌 这就是FIFO(先进先出)


⑨ 保存当前节点的值

vec.push_back(node->val);
  • 把当前节点值放进本层vec


⑩ 把下一层节点加入队列

if(node->left) que.push(node->left); if(node->right) que.push(node->right);
  • 左孩子、右孩子不为空 → 加入队列

  • ⚠️ 注意:
    它们是下一层的节点


⑪ 当前层结束,放入 result

result.push_back(vec);
  • 一整层处理完

  • 把这一层的结果加入最终答案


⑫ 返回结果

return result;

四、用一个例子跑一遍(超重要)

假设二叉树是:

1 / \ 2 3 / / 4 5

初始:

队列: [1] result:[]

第一轮 while

  • size = 1

  • 处理1

  • 加入2, 3

vec = [1] 队列 = [2, 3] result = [[1]]

第二轮 while

  • size = 2

  • 处理2 → 加 4

  • 处理3 → 加 5

vec = [2, 3] 队列 = [4, 5] result = [[1], [2, 3]]

第三轮 while

  • size = 2

  • 处理4

  • 处理5

vec = [4, 5] 队列 = [] result = [[1], [2, 3], [4, 5]]

结束 🎉


五、你现在至少要记住这 3 点

1️⃣层序遍历 = 队列
2️⃣size = que.size()是分层的关键
3️⃣while 管层,for 管层内

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 7:14:54

Qwen3-Embedding-4B部署卡顿?显存优化实战教程来解决

Qwen3-Embedding-4B部署卡顿&#xff1f;显存优化实战教程来解决 在大模型应用日益普及的今天&#xff0c;向量嵌入&#xff08;Embedding&#xff09;服务作为检索增强生成&#xff08;RAG&#xff09;、语义搜索、推荐系统等场景的核心组件&#xff0c;其性能和稳定性直接影…

作者头像 李华
网站建设 2026/8/25 8:44:57

Elasticsearch可视化工具日志告警配置操作指南

手把手教你用 Kibana 搭建日志告警系统&#xff1a;从零到上线的实战指南你有没有遇到过这种情况&#xff1f;半夜收到同事电话&#xff0c;说服务突然报错&#xff0c;但等你登录系统查看日志时&#xff0c;异常早已过去&#xff0c;现场信息丢失大半。或者每天手动翻看几十个…

作者头像 李华
网站建设 2026/8/24 21:38:47

5分钟部署Qwen3-0.6B,用vLLM一键搭建AI对话API

5分钟部署Qwen3-0.6B&#xff0c;用vLLM一键搭建AI对话API 1. 引言&#xff1a;快速构建本地化AI对话服务 在大模型应用日益普及的今天&#xff0c;如何高效地将开源语言模型集成到实际项目中成为开发者关注的核心问题。Qwen3-0.6B作为阿里巴巴通义千问系列最新发布的轻量级大…

作者头像 李华
网站建设 2026/8/22 14:13:27

cp2102在远程I/O系统中的通信延迟分析与改进

深入拆解 cp2102 通信延迟&#xff1a;从工业轮询卡顿到低延迟优化实战在一次工厂调试中&#xff0c;工程师小李遇到了一个“诡异”的问题&#xff1a;他用一台工控机通过 USB 转串口模块读取 8 个远程 I/O 模块的数据&#xff0c;明明每个设备响应只要几毫秒&#xff0c;但整个…

作者头像 李华
网站建设 2026/8/21 11:36:19

用VibeVoice做虚拟客服对练,训练效率大幅提升

用VibeVoice做虚拟客服对练&#xff0c;训练效率大幅提升 1. 背景与痛点&#xff1a;传统客服培训的瓶颈 在企业服务体系建设中&#xff0c;客服人员的沟通能力训练一直是关键环节。传统的培训方式多依赖于角色扮演、录音回放和人工点评&#xff0c;存在三大核心问题&#xf…

作者头像 李华
网站建设 2026/8/22 19:41:34

YOLOv12目标检测实战:云端GPU 10分钟出结果,成本仅1元

YOLOv12目标检测实战&#xff1a;云端GPU 10分钟出结果&#xff0c;成本仅1元 你是不是也遇到过这样的情况&#xff1f;作为产品经理&#xff0c;想为新App集成一个高效的目标检测功能&#xff0c;听说最新的YOLOv12在速度和精度上都有显著提升&#xff0c;特别适合移动端部署…

作者头像 李华