题目
解题思路:
-
levelsize + 队列
用队列来放入子叶,用一个levelsize来记录每一层的数量,出数据的时候就出size个数据。
-
两个队列
一个 Iqu队列 来如下一层子叶的节点,一个 Oqu队列 来出当前层的节点。一旦Oqu队列空了,将Iqu队列的数据给Oqu队列,直至两个队列都为空了。
代码实现:
- levelsize + 队列
class Solution
{
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
vector<vector<int>> vv;
queue<TreeNode*> q;
int levelsize = 0;
if(root)
{
q.push(root);
levelsize++;
}
while(levelsize)
{
vector<int> v;
while(levelsize--)
{
TreeNode* front = q.front();
q.pop();
v.push_back(front->val);
if(front->left)
q.push(front->left);
if(front->right)
q.push(front->right);
}
vv.push_back(v);
levelsize = q.size();
}
return vv;
}
};
- 两个队列
class Solution
{
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
queue<TreeNode*> out_q;
queue<TreeNode*> in_q;
vector<vector<int>> vv;
if(root)
out_q.push(root);
while(!out_q.empty())
{
vector<int> v;
while(!out_q.empty())
{
TreeNode* front = out_q.front();
out_q.pop();
v.push_back(front->val);
if(front->left)
in_q.push(front->left);
if(front->right)
in_q.push(front->right);
}
out_q.swap(in_q);
vv.push_back(v);
}
return vv;
}
};