news 2026/6/15 18:45:34

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

作者头像

张小明

前端开发工程师

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/6/15 13:33:21

GPEN推理耗时长?CUDA 12.4加速性能实测报告

GPEN推理耗时长&#xff1f;CUDA 12.4加速性能实测报告 在人像修复与增强领域&#xff0c;GPEN&#xff08;GAN-Prior based Enhancement Network&#xff09;因其出色的细节恢复能力和自然的纹理生成效果&#xff0c;被广泛应用于老照片修复、低清图像增强等场景。然而&#…

作者头像 李华
网站建设 2026/6/10 15:02:22

ms-swift量化导出教程:4-bit AWQ模型压缩实战

ms-swift量化导出教程&#xff1a;4-bit AWQ模型压缩实战 在大模型部署场景中&#xff0c;显存占用和推理延迟是制约生产落地的核心瓶颈。随着模型参数规模不断攀升&#xff0c;如何在保持性能的同时降低资源消耗成为工程实践中的关键挑战。量化技术作为模型压缩的重要手段&am…

作者头像 李华
网站建设 2026/6/15 13:54:37

摄影后期新玩法:用BSHM镜像实现专业级人像抠图

摄影后期新玩法&#xff1a;用BSHM镜像实现专业级人像抠图 1. 引言 1.1 人像抠图的技术演进与现实挑战 在数字摄影和视觉内容创作日益普及的今天&#xff0c;人像抠图已成为图像编辑、视频直播、虚拟背景替换等场景中的核心技术。传统方法依赖绿幕拍摄配合色度键控&#xff…

作者头像 李华
网站建设 2026/6/15 15:46:58

从零到一:Image-to-Video完整部署指南

从零到一&#xff1a;Image-to-Video完整部署指南 1. 简介与背景 随着生成式AI技术的快速发展&#xff0c;图像到视频&#xff08;Image-to-Video, I2V&#xff09;生成已成为内容创作领域的重要工具。I2V技术能够将静态图像转化为具有动态效果的短视频&#xff0c;在影视预演…

作者头像 李华
网站建设 2026/6/15 14:41:53

Elasticsearch 201状态码与200区别:全面讲解响应逻辑

Elasticsearch 中 201 与 200 状态码的真正区别&#xff1a;不只是“成功”那么简单你有没有遇到过这种情况&#xff1f;向 Elasticsearch 发送一个写入请求&#xff0c;返回了200 OK&#xff0c;但你不确定是新增了一条数据&#xff0c;还是覆盖了一个已有文档。或者反过来&am…

作者头像 李华
网站建设 2026/6/15 17:54:35

如何实现高质量中文语音合成?Sambert部署教程入门必看

如何实现高质量中文语音合成&#xff1f;Sambert部署教程入门必看 1. 引言&#xff1a;多情感中文语音合成的工业级解决方案 在智能客服、有声读物、虚拟主播等应用场景中&#xff0c;高质量的中文语音合成&#xff08;Text-to-Speech, TTS&#xff09;技术正成为提升用户体验…

作者头像 李华