155.二叉树:二叉树的层序遍历(力扣)

代码解决

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) 
    {
        queue<TreeNode*> que;  // 定义队列用于层次遍历
        if(root!=NULL) que.push(root);  // 如果根节点不为空,则将根节点加入队列
        vector<vector<int>> result;  // 定义结果向量,用于存储每一层的节点值
        while(!que.empty())  // 当队列不为空时,继续处理
        {
            int size=que.size();  // 获取当前层的节点数量
            vector<int> vec;  // 定义向量用于存储当前层的节点值
            for(int i=0;i<size;i++)  // 遍历当前层的每一个节点
            {
                TreeNode* node=que.front();  // 从队列中取出一个节点
                que.pop();  // 将该节点从队列中移除
                vec.push_back(node->val);  // 将该节点的值加入向量
                if(node->left) que.push(node->left);  // 如果该节点有左子节点,将其加入队列
                if(node->right) que.push(node->right);  // 如果该节点有右子节点,将其加入队列
            }
            result.push_back(vec);  // 将当前层的节点值向量加入结果向量
        } 
        return result;  // 返回结果向量
    }
};

这段代码实现了一个二叉树的层次遍历(广度优先遍历),并返回每一层的节点值组成的二维数组。具体实现如下:

  1. 定义二叉树节点的结构体 TreeNode
  2. 定义一个 Solution 类,其中包含一个公共成员函数 levelOrder
  3. levelOrder 函数中,首先检查根节点是否为空,如果不为空则将根节点加入队列。
  4. 初始化结果向量 result,用于存储每一层的节点值。
  5. 进入一个 while 循环,只要队列不为空,就继续处理:
    • 获取当前队列的大小(即当前层的节点数量)。
    • 初始化一个向量 vec,用于存储当前层的节点值。
    • 使用 for 循环遍历当前层的每一个节点:
      • 从队列中取出一个节点,并将其值加入 vec
      • 如果该节点有左子节点,则将左子节点加入队列。
      • 如果该节点有右子节点,则将右子节点加入队列。
    • 将当前层的节点值向量 vec 加入结果向量 result
  6. 最后返回结果向量 result
相关推荐
chipsense13 分钟前
霍尔电流传感器选型方法论再升级:从800V平台到TMR竞争的全场景决策树
算法·决策树·机器学习·闭环霍尔·tmr传感
CoderYanger28 分钟前
14届蓝桥杯省赛Java A 组Q1~Q3
java·开发语言·线性代数·算法·职场和发展·蓝桥杯
会编程的土豆2 小时前
【日常做题】 代码随想录(岛屿最大面积+寻宝)
数据结构·算法·图论
阿洛学长2 小时前
汉洛塔结构思维
算法
木子n12 小时前
第2篇:坐标变换与数学基础:FOC算法的核心数学工具
算法·电机控制·foc
阿Y加油吧2 小时前
两道经典 DP 题:零钱兑换 & 单词拆分(完全背包 + 字符串 DP)
算法
疯狂打码的少年2 小时前
有序线性表删除一个元素:顺序存储 vs 单链表,平均要移动多少个元素?
数据结构·算法·链表
y = xⁿ2 小时前
20天速通LeetCode day07:前缀和
数据结构·算法·leetcode
项管芝士3 小时前
PMP认证备考全攻略:费用、周期与机构选择常见问题解答
职场和发展·职场发展
小雅痞3 小时前
[Java][Leetcode hard] 42. 接雨水
java·开发语言·leetcode