题目链接:429. N 叉树的层序遍历
题目:
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
示例 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]]
提示:
- 树的高度不会超过 1000
- 树的节点总数在 [0, 10^4] 之间
思路和算法:
这题遍历二叉树的每层,只不过一个节点不是有两个孩子,而是有多个孩子。可以采用一个增强for循环用来遍历每个节点的孩子数组。
代码(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) {
vector<vector<int>> res; //结果数组
queue<Node*> que;
if (root) que.push(root);
while (!que.empty()) {
int size = que.size(); //队列的长度是不定值,遍历前需记录队列的长度为定值
vector<int> vec;
for (int i = 0; i < size; ++i) {
Node* cur = que.front();
que.pop();
vec.push_back(cur->val); //将遍历到的每层节点的值放入一维数组
for (Node* a : cur->children) {
if(a) que.push(a); //遍历cur节点的孩子数组,将孩子节点放入队列
}
}
res.push_back(vec);
}
return res;
}
};