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
相关推荐
圣保罗的大教堂20 分钟前
leetcode 2540. 最小公共值 简单
leetcode
Raink老师1 小时前
【AI面试临阵磨枪-69】如何设计一个支持百万级工具的 Agent 系统?如何快速路由与选择工具?
人工智能·面试·职场和发展
云泽8081 小时前
笔试算法 -位运算篇(二):从唯一字符到消失数字
c++·算法·位运算
ʚ希希ɞ ྀ1 小时前
不同路径|| -- dp
算法
IT 行者2 小时前
SimHash 与 MinHash:相似性计算的双子星算法
算法·hash·比对
智者知已应修善业3 小时前
【51单片机8位数码管动态显示日期小数点风格】2023-11-13
c++·经验分享·笔记·算法·51单片机
智者知已应修善业3 小时前
【51单片机有三个LED 分别第一个灯闪三下 再到第二个灯又闪三下 再到第三个灯又闪三下 就这样循环程序】2023-11-16
c++·经验分享·笔记·算法·51单片机
小L~~~4 小时前
基于贪心策略的混合遗传算法求解01背包问题
python·算法
洛水水5 小时前
【力扣100题】53.最长回文子串
算法·leetcode·职场和发展