给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树 :
返回其层序遍历:
[
[1],
[3,2,4],
[5,6]
]
广度优先搜索
vector<vector<int>> levelOrder(Node* root)
{
vector < vector<int >> res;
if (root == NULL)
return res;
else
{
int count = 1;
queue<Node*>q;
q.push(root);
{
vector<int> inside;
while (!q.empty())
{
count = q.size();
for (int i = 0; i < count; i++)
{
Node * temp = q.front();
inside.push_back(temp->val);
q.pop();
for (int i = 0; i < temp->children.size(); i++)
{
q.push(temp->children[i]);
}
}
res.push_back(inside);
inside.clear();
}
}
return res;
}
}
vector<vector<int>> res;
void dfs(Node* root, int n)
{
if (root == NULL)
return;
else
{
if (n >= res.size())
{
vector<int> temp;
res.push_back(temp);
}
res[n].push_back(root->val);
for (int i = 0; i < root->children.size(); i++)
{
dfs(root->children[i], n + 1);
}
}
}
vector<vector<int>> levelOrder(Node* root)//不用队列,用递归写
{
dfs(root, 0);
return res;
}