题目描述
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树
:
示例
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
说明:
树的深度不会超过 1000。
树的节点总数不会超过 5000。
思路1
迭代,BFS。
代码
/*
// 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) return res;
queue<Node*> q;
q.push(root);
while (!q.empty()){
vector<int> tmp;
int size = q.size();
for (int i = 0; i < size; i++){
Node* node = q.front();
q.pop();
tmp.emplace_back(node->val);
int num = node->children.size();
for (int j = 0; j < num; j++){
q.push(node->children[j]);
}
}
res.emplace_back(tmp);
}
return res;
}
};
思路2
递归,DFS。
代码
/*
// 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) return res;
queue<Node*> q;
q.push(root);
dfs(root, res, 0);
return res;
}
void dfs(Node* root, vector<vector<int>>& res, int index){
if (res.size() <= index) res.emplace_back(vector<int>());
res[index].emplace_back(root->val);
for (int i = 0; i < root->children.size(); i++)
dfs(root->children[i], res, index+1);
}
};