给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
思路
将每层的结点压入队列,记录下压入的数量,然后遍历这么多数量的结点(队列保证了先进先出),将这些结点的值存入二维数组中,i层放在result[i-1],vector自带的push_back可以很轻松的实现这种操作,同时将这些结点的子节点压入队列。当队列为空时结束操作
class Solution {
public:
queue<TreeNode*> ans;
vector<vector<int>> result;
void BFS(int layer,int size)
{
vector<int> temp;
int k=0;
for(int i=0;i<size;i++)
{
auto p=ans.front();
ans.pop();
temp.push_back(p->val);
if(p->left!=nullptr)
{
ans.push(p->left);
k++;
}
if(p->right!=nullptr)
{
ans.push(p->right);
k++;
}
}
result.push_back(temp);
if(k!=0)
{
BFS(layer+1,k);
}
}
vector<vector<int>> levelOrder(TreeNode* root) {
if(root)
{
ans.push(root);
}else
{
return result;
}
BFS(0,1);
return result;
}
};
|