题目:N叉树的层序遍历
题目描述:
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例子:给定一个三叉树
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
我的思路如下:
用一个队列,并用一个标志性的字符将二叉树每一层的结点分开(比如nullptr),然后一层一层插入到vector中,如果遇到nullptr,则重新插入nullptr
代码实现如下:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
//队列,一个二维数组实现
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> res;
if(root == nullptr){
return res;
}
queue<Node*> qu;
qu.push(root);
//用nullptr分割每一层
qu.push(nullptr);
while(!qu.empty()){
vector<int> vec;
while(!qu.empty()){
Node* tmp = qu.front();
qu.pop();
if(tmp == nullptr){
//如果等于nullptr,只要qu不为空就在push一个
//nullptr
if(!qu.empty())
qu.push(nullptr);
break;
}
else{
vec.push_back(tmp->val);
for(Node* node:tmp->children)
if(node != nullptr){
qu.push(node);
}
}
}
res.push_back(vec);
}
return res;
}
};