当前位置: 首页 > news >正文

BFS--------N叉树的层序遍历

429. N 叉树的层序遍历 - 力扣(LeetCode)

1.题目解析

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

2.示例

示例 1:

输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]

示例 2:

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

3.解题思路

1.这道题就是对N叉树进行层序遍历(BFS),只需要逐层对树进行遍历即可

2.创建返回值ret,ret是一个二维数组,因此使用vector<vector<int>>   ret

3.使用队列的FIFO性质,创建一个队列queue<Node*>  q

4.队列 q 被用作实现 BFS 的数据结构,按照从上到下的顺序访问树的所有节点。

5.q.push(root)将根节点加入到队列q中

6.当q.size()不为空时,一直执行while循环

7.int sz = q.size()获取当前队列中的节点数,即当前层的节点数

8.vector<int> tmp;:用于存储当前层节点的值

  • 循环 for(int i = 0; i < sz; i++):遍历当前层的所有节点。

    • Node* t = q.front();:获取队列头部的节点。

    • q.pop();:从队列中移除该节点。

    • tmp.push_back(t->val);:将节点的值添加到 tmp 列表中。

    • for(Node* child : t->children):遍历该节点的所有子节点。

      • if(child != nullptr) q.push(child);:如果子节点不为空,将其加入队列,以便后续访问。

4.代码实现

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        vector<vector<int>>  ret;
        queue<Node*> q;

        if(root == nullptr)
            return ret;
        
        q.push(root);
        while(q.size())
        {
            int sz = q.size();//先求出本层元素的个数
            vector<int> tmp;
            for(int i = 0; i < sz; i++)
            {
                Node* t = q.front();
                q.pop();
                tmp.push_back(t->val);
                for(Node* child : t->children)
                {
                    if(child != nullptr)
                        q.push(child);
                }
            } 
            ret.push_back(tmp);
        }
        return ret;
    }
};

相关文章:

  • WPF的主题切换
  • 基于视觉的核桃分级与套膜装置研究(大纲)
  • 深度学习 Deep Learning 第5章 机器学习基础
  • 使用自定义指令实现css样式层叠
  • DeDeCMS漏洞
  • Matrix-Breakout-2-Morpheus靶场通关心得:技巧与经验分享
  • 机器学习-手搓KNN算法
  • 小程序API —— 54 路由与通信 - 编程式导航
  • Mistral AI发布开源多模态模型Mistral Small 3.1:240亿参数实现超越GPT-4o Mini的性能
  • Handler消息机制源码分析
  • 从模拟到现实:Sensodrive高精度力反馈技术赋能物流运输的高效与安全
  • 基于Wasm的边缘计算Pandas:突破端侧AI的最后一公里——让数据分析在手机、IoT设备上飞驰
  • 若依 Excel导入与导出 配置下拉选项
  • 通过蒸馏大模型训练建筑向智能助手模型的思路
  • 63. 根文件系统构建
  • STM32 模拟SPI 模式0
  • 大模型+知识图谱:赋能知识智能新升级
  • Harmony OS【获取本地json数据的方法】
  • 【el-upload】el-upload组件 - list-type=“picture“ 时,文件预览展示优化
  • dfs(二十)257. 二叉树的所有路径
  • 一条铺过11年时光的科学红毯,丈量上海科创的“长宽高”
  • 南宁一学校发生伤害案件,警方通报:嫌疑人死亡,2人受伤
  • 特朗普促卡塔尔说服伊朗放弃核计划,伊朗总统:你来吓唬我们?
  • 明查| 新一代AI诊疗系统可3秒筛查13种癌症?没有证据
  • 多个侵华日军细菌战部队留守名簿文件首次公布
  • 首次采用“顶置主星+侧挂从星”布局,长二丁“1箭12星”发射成功