news 2026/4/18 8:22:11

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

作者头像

张小明

前端开发工程师

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/4/18 3:51:20

图解说明AD中Gerber光绘输出与CAM处理步骤

一次做对&#xff1a;Altium Designer中Gerber输出与CAM处理的实战全解析你有没有遇到过这样的情况&#xff1f;PCB板子打样回来&#xff0c;发现焊盘没开窗、丝印压在引脚上&#xff0c;或者钻孔偏移导致短路……返工不仅耽误项目进度&#xff0c;还白白烧掉几千甚至上万元的制…

作者头像 李华
网站建设 2026/4/18 3:52:32

YOLOE镜像真实体验:视觉提示功能太强大了

YOLOE镜像真实体验&#xff1a;视觉提示功能太强大了 在一次边缘计算设备的性能测试中&#xff0c;我尝试将一台搭载RTX 3060的工控机接入产线相机&#xff0c;目标是实现对多种未标注物料的实时识别。传统目标检测模型需要重新训练才能适应新类别&#xff0c;但这次我使用的是…

作者头像 李华
网站建设 2026/4/18 5:27:59

UI-TARS-desktop实战:如何验证Qwen3-4B模型启动成功

UI-TARS-desktop实战&#xff1a;如何验证Qwen3-4B模型启动成功 1. UI-TARS-desktop简介 Agent TARS 是一个开源的多模态 AI Agent 框架&#xff0c;致力于通过融合 GUI 自动化、视觉理解&#xff08;Vision&#xff09;等能力&#xff0c;构建能够与现实世界工具无缝交互的智…

作者头像 李华
网站建设 2026/3/31 8:34:20

BGE-Reranker-v2-m3问答系统:云端3步搭建智能客服原型

BGE-Reranker-v2-m3问答系统&#xff1a;云端3步搭建智能客服原型 你是不是也遇到过这样的场景&#xff1f;作为产品经理&#xff0c;明天就要向投资人演示公司的AI能力&#xff0c;领导一句话&#xff1a;“搞个能自动回答问题的智能客服出来”&#xff0c;但开发团队说从零做…

作者头像 李华
网站建设 2026/4/2 23:19:31

WinDbg分析蓝屏教程:驱动未处理异常的捕捉方法

用WinDbg精准定位蓝屏元凶&#xff1a;从崩溃现场到驱动异常的完整追踪 你有没有遇到过这样的场景&#xff1f;服务器突然重启&#xff0c;屏幕上一闪而过的蓝屏写着 KERNEL_MODE_EXCEPTION_NOT_HANDLED &#xff1b;工业设备在运行中无预警宕机&#xff0c;日志里却找不到任…

作者头像 李华
网站建设 2026/4/18 8:00:12

Qwen3-4B新手指南:0配置云端镜像,3步搞定模型体验

Qwen3-4B新手指南&#xff1a;0配置云端镜像&#xff0c;3步搞定模型体验 你是不是也和我当初一样&#xff1f;想转行学AI&#xff0c;听说大模型是风口&#xff0c;于是兴致勃勃地打开GitHub想找一个能练手的项目。结果刚点进Qwen3-4B的仓库&#xff0c;就看到满屏的Docker命…

作者头像 李华