当前位置: 首页 > news >正文

【练习】【二叉树】力扣热题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. 二叉树的层序遍历


思路(注意事项)

  • 队列定义为指针类型

核心

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

纯代码

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;
    }
};

题解(加注释)

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;
    }
};

相关文章:

  • PHP之Cookie和Session
  • Java 大视界 -- Java 大数据在智慧交通信号灯智能控制中的应用(116)
  • 为解决局域网IP、DNS切换的Windows BAT脚本
  • jupyter notebook更改文件存储路径
  • 多线程-锁升级和对象的内存布局
  • [自动驾驶-传感器融合] 多激光雷达的外参标定
  • 面试基础--MySQL SQL 优化深度解析
  • 新能源汽车工厂如何通过安灯系统实现精益生产
  • [场景题]如何实现购物车
  • 给没有登录认证的web应用添加登录认证(openresty lua实现)
  • PPT小黑第26套
  • Android中的触摸事件是如何传递和处理的
  • 服务器数据恢复—raid5阵列中硬盘掉线导致上层应用不可用的数据恢复案例
  • Linux 文件和目录权限管理详解
  • JavaScript数据结构-Set的使用
  • 宇树科技嵌入式面试题及参考答案(春晚机器人的公司)
  • Idea配置注释模板
  • 什么是安全组及其作用?
  • Zabbix+Deepseek实现AI告警分析(非本地部署大模型版)
  • 【微信小程序】每日心情笔记
  • 家国万里·时光故事会|构筑中国船舰钢筋铁骨,她在焊花里展现工匠风范
  • 博物馆书单|走进博物馆,去体验一场与文明的对话
  • 缅甸发生5.0级地震
  • 林诗栋/蒯曼混双取胜,国乒赢得多哈世乒赛开门红
  • 梅花奖在上海|舞剧《朱鹮》,剧里剧外都是生命的赞歌
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前