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
相关推荐
wan5555cn6 分钟前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u60633 分钟前
常用排序算法核心知识点梳理
算法·排序
蒋星熠3 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
小欣加油3 小时前
leetcode 面试题01.02判定是否互为字符重排
数据结构·c++·算法·leetcode·职场和发展
3Cloudream3 小时前
LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
算法·leetcode·字符串·双指针·滑动窗口·哈希表·中等
王璐WL3 小时前
【c++】c++第一课:命名空间
数据结构·c++·算法
空白到白4 小时前
机器学习-聚类
人工智能·算法·机器学习·聚类
索迪迈科技4 小时前
java后端工程师进修ing(研一版 || day40)
java·开发语言·学习·算法
zzzsde4 小时前
【数据结构】队列
数据结构·算法
芒克芒克5 小时前
LeetCode 面试经典 150 题:删除有序数组中的重复项(双指针思想解法详解)
算法