问题描述:
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树
:
返回其层序遍历:
[ [1], [3,2,4], [5,6] ]
基本思路:
就是BFS,记录层数的那一种。
AC代码:
/*
// 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:
// 多叉树的层序遍历其实就是BFS
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>> res;
if (!root) return res;
queue<Node *> q;
q.push(root);
int width = q.size();
while (!q.empty()) {
vector<int> row;
for (int i = 0; i < width; ++i) {
auto v = q.front();
q.pop();
row.push_back(v->val);
auto neighbors = v->children;
for (auto n : neighbors) {
q.push(n);
}
}
res.push_back(row);
width = q.size();
}
return res;
}
};
说明:
- 树的深度不会超过
1000
。 - 树的节点总数不会超过
5000
。