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;
    }
};
相关推荐
爱吃喵的鲤鱼10 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
懒惰才能让科技进步32 分钟前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
7年老菜鸡37 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Ni-Guvara1 小时前
函数对象笔记
c++·算法
似霰1 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭1 小时前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风1 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵1 小时前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier
泉崎1 小时前
11.7比赛总结
数据结构·算法