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
相关推荐
C137的本贾尼9 分钟前
(每日一道算法题)二叉树剪枝
算法·机器学习·剪枝
前端小崔34 分钟前
前端面试题之ES6保姆级教程
开发语言·前端·javascript·面试·职场和发展·ecmascript·es6
BUG收容所所长2 小时前
栈的奇妙世界:从冰棒到算法的华丽转身
前端·javascript·算法
XRZaaa2 小时前
常见排序算法详解与C语言实现
c语言·算法·排序算法
@我漫长的孤独流浪2 小时前
数据结构测试模拟题(4)
数据结构·c++·算法
智驱力人工智能2 小时前
智慧零售管理中的客流统计与属性分析
人工智能·算法·边缘计算·零售·智慧零售·聚众识别·人员计数
WindSearcher3 小时前
大模型微调相关知识
后端·算法
取酒鱼食--【余九】3 小时前
rl_sar实现sim2real的整体思路
人工智能·笔记·算法·rl_sar
Magnum Lehar5 小时前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
水蓝烟雨5 小时前
[面试精选] 0094. 二叉树的中序遍历
算法·面试精选