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;
    }
};
相关推荐
Sam_Deep_Thinking32 分钟前
学数据结构到底有什么用
数据结构
kobesdu39 分钟前
人形机器人SLAM:技术挑战、算法综述与开源方案
算法·机器人·人形机器人
yolo_guo1 小时前
redis++使用: hmset 与 hmget
c++·redis
handler012 小时前
拒绝权限报错!三分钟掌握 Linux 权限管理
linux·c语言·c++·笔记·学习
椰羊~王小美2 小时前
随机数概念及算法
算法
阿Y加油吧3 小时前
算法实战笔记:LeetCode 169 多数元素 & 75 颜色分类
笔记·算法·leetcode
t***5443 小时前
如何在Dev-C++中选择Clang编译器
开发语言·c++
不要秃头的小孩3 小时前
力扣刷题——509. 斐波那契数
python·算法·leetcode·动态规划
汉克老师4 小时前
GESP2023年9月认证C++三级( 第一部分选择题(9-15))
c++·gesp三级·gesp3级