【C++算法】70.队列+宽搜_N 叉树的层序遍历

文章目录


题目链接:

429. N 叉树的层序遍历


题目描述:


解法

使用队列层序遍历就可以了。

先入根节点1。queue:1

然后出根节点1,入孩子节点2,3,4,然后统计根节点的孩子节点有3个。queue:2,3,4

然后出2,入2的孩子节点5,6...直到3个孩子都出来。queue:5,6,7,8

此时剩下来的4个元素就是最后一层节点。


C++ 算法代码:

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) 
    {
        // N叉树的层序遍历算法
        // 基本思路:使用队列进行广度优先搜索(BFS),逐层处理节点
        
        vector<vector<int>> ret; // 存储最终结果,每个内部vector代表一层的节点值
        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; // 返回最终的层序遍历结果
    }
};
相关推荐
AI科技星5 分钟前
时空的固有脉动:波动方程 ∇²L = (1/c²) ∂²L/∂t² 的第一性原理推导、诠释与验证
数据结构·人工智能·算法·机器学习·重构
独自破碎E5 分钟前
Leetcode862和至少为K的最短子数组
java·开发语言
qq_370773098 分钟前
x64dbg 脚本常用命令
开发语言·x64dbg
阿豪只会阿巴12 分钟前
【多喝热水系列】从零开始的ROS2之旅——Day4
c++·笔记·python·ros2
军军君0119 分钟前
Three.js基础功能学习五:雾与渲染目标
开发语言·前端·javascript·学习·3d·前端框架·three
charlie11451419125 分钟前
FreeRTOS:软件定时器(Software Timers)与时间管理
开发语言·笔记·学习·freertos·实时操作系统·工程
2401_8414956427 分钟前
【LeetCode刷题】寻找重复数
数据结构·python·算法·leetcode·链表·数组·重复数
washingtin34 分钟前
Get “https://registry-1.docker.io/v2/“: context deadline exceeded
java·开发语言
only-lucky39 分钟前
Python版本OpenCV
开发语言·python·opencv
罗技12343 分钟前
Easysearch 集群监控实战(下):线程池、索引、查询、段合并性能指标详解
前端·javascript·算法