【练习】【二叉树】力扣热题100 102. 二叉树的层序遍历

题目

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

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

输出:[[3],[9,20],[15,7]]
示例 2:

输入:root = [1]

输出:[[1]]
示例 3:

输入:root = []

输出:[]

来源:力扣热题100 102. 二叉树的层序遍历


思路(注意事项)

  • 队列定义为指针类型

核心

  • 定义队列
  • 根节点入队
  • 队列非空时循环
    • 遍历队列中的所有元素并加入临时结果集
    • 将临时结果集加入最终结果集

纯代码

c 复制代码
class Solution {
private:
    vector<vector<int>> ans;  
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if (!root) return {};
        queue<TreeNode*> q;
        q.push(root);
        
        while (!q.empty())
        {
            int n = q.size();
            vector<int> path;
            while (n --)
            {
                auto tmp = q.front();
                q.pop();
                path.push_back(tmp -> val);

                if (tmp -> left) q.push(tmp -> left);
                if (tmp -> right) q.push(tmp -> right);
            }
            ans.push_back(path);
        }
        return ans;
    }
};

题解(加注释)

c 复制代码
class Solution {
private:
    vector<vector<int>> ans; // 用于存储层序遍历的结果

public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        // 如果根节点为空,直接返回空结果
        if (!root) return {};

        // 使用队列辅助层序遍历
        queue<TreeNode*> q;
        q.push(root); // 将根节点入队

        // 开始层序遍历
        while (!q.empty()) {
            int n = q.size(); // 当前层的节点数
            vector<int> path; // 用于存储当前层的节点值

            // 遍历当前层的所有节点
            while (n--) {
                TreeNode* tmp = q.front(); // 取出队头节点
                q.pop(); // 将队头节点出队

                path.push_back(tmp->val); // 将当前节点的值加入当前层的路径

                // 如果当前节点有左子节点,将左子节点入队
                if (tmp->left) q.push(tmp->left);
                // 如果当前节点有右子节点,将右子节点入队
                if (tmp->right) q.push(tmp->right);
            }

            // 将当前层的路径加入结果集
            ans.push_back(path);
        }

        // 返回层序遍历的结果
        return ans;
    }
};
相关推荐
码农编程录33 分钟前
【c/c++3】类和对象,vector容器,类继承和多态,systemd,std&boost
c++
martian6651 小时前
支持向量机(SVM)深度解析:从数学根基到工程实践
算法·机器学习·支持向量机
孟大本事要学习1 小时前
算法19天|回溯算法:理论基础、组合、组合总和Ⅲ、电话号码的字母组合
算法
??tobenewyorker2 小时前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
贾全2 小时前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
GIS小天3 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
oioihoii3 小时前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
满分观察网友z3 小时前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
m0_687399843 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
森焱森4 小时前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机