【C++算法】70.队列+宽搜_N 叉树的层序遍历
文章目录
- 题目链接:
- 题目描述:
- 解法
- C++ 算法代码:
题目链接:
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++ 算法代码:
/*
// 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; // 返回最终的层序遍历结果}
};