LeetCode102.二叉树的层序遍历

题目

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

示例

cpp 复制代码
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

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

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

思路

  1. 创建一个队列(queue)用于存储待处理的二叉树节点。

  2. 将根节点放入队列中。

  3. 开始进行层序遍历:

  • 当队列不为空时,表示还有节点需要处理。
  • 每次处理一层的节点时,先获取当前队列的大小,这个大小即为当前层的节点数目。
  • 遍历当前层级的节点:
    • 依次取出队首的节点,将其值存入当前层级的结果中。
    • 如果该节点有左子节点,将左子节点加入队列。
    • 如果该节点有右子节点,将右子节点加入队列。
  1. 将每一层的节点值存入最终的结果中,直至队列为空,完成整个层序遍历。

Code

cpp 复制代码
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> result; // 存储层序遍历的结果
        if (root == NULL) {
            return result; // 如果根节点为空,直接返回空的结果
        }

        queue<TreeNode*> q;
        q.push(root); // 将根节点放入队列中

        // 开始进行层序遍历
        while (!q.empty()) {
            int level_size = q.size(); // 获取当前层级的节点数量
            vector<int> level_values;  // 存储当前层级节点的值

            // 遍历当前层级的节点
            for (int i = 0; i < level_size; i++) {
                TreeNode* node = q.front();
                q.pop(); // 出队

                level_values.push_back(node->val); // 存储当前节点的值

                // 将当前节点的子节点(如果存在)加入队列中
                if (node->left) {
                    q.push(node->left);
                }
                if (node->right) {
                    q.push(node->right);
                }
            }

            result.push_back(level_values); // 将当前层级的节点值存入最终结果中
        }

        return result;
    }
};
相关推荐
感哥9 小时前
C++ 面向对象
c++
CoovallyAIHub11 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
沐怡旸11 小时前
【底层机制】std::shared_ptr解决的痛点?是什么?如何实现?如何正确用?
c++·面试
NAGNIP12 小时前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo12 小时前
半开区间和开区间的两个二分模版
算法
moonlifesudo12 小时前
300:最长递增子序列
算法
CoovallyAIHub17 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
感哥17 小时前
C++ STL 常用算法
c++
CoovallyAIHub18 小时前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
saltymilk1 天前
C++ 模板参数推导问题小记(模板类的模板构造函数)
c++·模板元编程