当前位置: 首页 > 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;
    }
};

http://www.dtcms.com/a/80096.html

相关文章:

  • 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. 二叉树的所有路径
  • /proc/[pid]/maps介绍和pmap介绍、RSS
  • 《深入理解 TypeScript:函数类型与泛型全解析》(万字长文)
  • 【MyDB】5-索引管理之 1-索引管理思路概览
  • Centos7配置本地yum源
  • 大白话读懂java对象创建的过程
  • 织梦DedeCMS数据库表说明大全
  • django入门教程之request和reponse【二】
  • Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(六)
  • 联想拯救者触摸板会每次开机都自动关闭、联想笔记本触摸板关闭、笔记本电脑触摸板自动关闭的解决方法
  • 演员马晓琳正式加入创星演员出道计划,开启演艺事业新篇章