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;
    }
};
相关推荐
aaaameliaaa3 小时前
字符函数和字符串函数
c语言·笔记·算法
城管不管4 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
月疯5 小时前
二分法算法(水平等分图形面积)
算法
豆瓣鸡5 小时前
算法日记 - Day3
java·开发语言·算法
白白白小纯5 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
Achou.Wang5 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
The Chosen One9855 小时前
高进度算法模板速记(待完善)
java·前端·算法
小王C语言6 小时前
【7. 实现登录注册模块】:实现会话管理、注册/登录/退出 API
网络·c++
圣保罗的大教堂8 小时前
leetcode 3517. 最小回文排列 I 中等
leetcode
土豆.exe8 小时前
Fastjson2 2.0.53 哈希碰撞 RCE:从原理到三种打法
算法·哈希算法