【剑斩OFFER】算法的暴力美学——leetcode 429 题:N 叉树的层序遍历

一、题目描述

二、算法原理

思路:队列 + 层序遍历

1)一开始先把根节点入队列

2)我们使用一个变量 num 来记录每层的数据个数,因为我们把每层的数据放到一个二维数组里面,所以我们还需要一个一维数组来记录当前层的数据。

3)我们把根据每层的数据的个数,一一出队列,出队列的值放到一维数组里面去,每次出一个节点都要把他的字节点入队列;

4)当遍历完当前层之后让这个一维数组入到二维数组里面去。重复上面的操作直到这个队列为空,队列为空 = 遍历完整颗树;

三、代码实现

cpp 复制代码
/*
// 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) {
        if(root == nullptr) return {};
        queue<Node*> _queue;
        _queue.push(root);//先让根节点入队列
        vector<vector<int>> ret;//最终的结果
        while(!_queue.empty())
        {
            vector<int> tmp;//临时存储,记录当前层的数据
            int num = _queue.size();//记录出队列的个数 = 当前层数据的个数
            while(num--)
            {
                Node* node = _queue.front();//获取队列头的节点
                _queue.pop();//删除队头的节点
                tmp.push_back(node->val);
                for(auto& e : node->children) if(e != nullptr) _queue.push(e);
            }
            ret.push_back(tmp);
        }
        return ret;
    }
};
相关推荐
吃好睡好便好2 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅2 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue5 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路6 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星6 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑6 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光6 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩7 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494737 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ8 小时前
单词拆分----dp
算法